首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

看看这段代码有什么错!解决办法

2012-03-01 
看看这段代码有什么错!急!#includestring.h#includestdio.h#includestdlib.hintmain(void){char*str

看看这段代码有什么错!急!
#include   <string.h>
#include   <stdio.h>
#include   <stdlib.h>
                         
int   main(void)   {

        char   *str[8]   =   { "one ",   "two ",   "three ",   "four ",
                                        "five ",   "six ",   "seven ",   "eight "};
        char   *concat   =   0;
        int   total_size   =   0;
        int   i   =   0;

        for   (i   =   0;   i   <   8;   i++)
                total_size   +=   strlen(str[i]);
               
        concat   =   (char*)   malloc(total_size);                
       
        for   (i   =   0;   i   <   8;   i++)   {
                strcat(concat,   str[i]);
              //   free(str[i]);    
        }

        printf( "%s\n ",   concat);
        free(concat);                                            
        return   0;
}


[解决办法]
至少这里长度少了一个字节:
concat = (char*) malloc(total_size);
应该是:
concat = (char*) malloc(total_size + 1);
因为字符串结束符需要一个字节的空间。
[解决办法]
就是那个 '\0 '
[解决办法]
哦,还有一处。
既然使用字符串连接函数strcat,那么应该从空串开始进行连接,而你的concat刚分配时,其指向的内容未初始化,是随机的,将导致很奇怪的结果。
解决办法是分配空间后立即把它初始化成一个容串就可以了:
concat = (char*) malloc(total_size + 1);
concat[0] = '0 ';
//或者:*concat = '\0 ';
//或者:strcpy(concat, " ");
//或者先:strcpy(concat, str[0]),然后从str[1]开始strcat;
//或者使用calloc,而不是malloc分配空间,那样空间会被自动初始化成全0,即相当于一个空串。
[解决办法]
哦,你已经发现了,呵呵。
[解决办法]
没有“各位”吧,好像就咱们俩。:D
[解决办法]
路过接分
[解决办法]
碰巧路过,嘿嘿!

热点排行