Dev C ++崩溃了这段代码

时间:2016-05-24 19:49:18

标签: c++ string initialization

我有下面的代码,我有2个问题,一个是我的[警告]初始化错误使得指针来自整数而没有强制转换,我无法理解为什么,警告显示在行上:< em> printf(&#34;字符串1:%s,其长度为%i \ nString 2:%s,长度为%i \ n&#34;,strg1,strlen(strg1),strg2,strlen(strg2) );

{{1}}

第二个错误是当我将2个字符串合并到第三个字符串时,如果我打印第3个字符串,则会出现图像中的错误。enter image description here

这一部分: printf(&#34;%s,现在字符串3的长度是:%i \ n&#34;,strg3,strlen(strg3));

2 个答案:

答案 0 :(得分:1)

由于strg3声明没有以分号结束,因此它表示:

char *strg3 = printf("String 1 : %s and Its length is %i \nString 2 : %s and its length is %i\n", strg1, strlen(strg1), strg2, strlen(strg2));

第二个问题是strg3分配是一个字节(或实际上是一个大小(char))短:

strg3 = (char*) malloc((strlen(strg1)+strlen(strg2)*sizeof(char)));

这不包括'\ 0'终止符的空格。以下strcat将覆盖分配的内存缓冲区。

答案 1 :(得分:0)

char *strg3 =之后你错过了一个分号。编译器会忽略注释并查找您要分配给strg3的内容。它找到printf调用并分配结果。 printf返回int(即打印的字符数)。因此,编译器认为您正在为int分配char* strg3。只需声明它而不指定任何内容,例如char *strg3;

您需要再分配一个字符strg3来保存其他2个字符串。

strg3 = (char*) malloc( (strlen(strg1)+strlen(strg2) + 1) *sizeof(char));

C风格的字符串最后需要额外\0的空间。 strcat将添加\0,但会写入不属于strg3的内存,可能会带来灾难性的结果,例如写入函数的返回地址。