strcat导致分段错误

时间:2011-11-23 21:24:08

标签: c string segmentation-fault

这会导致分段错误:

char str1[60];
char**array;

array=malloc( str_nos * sizeof(char *) );
array[i]=malloc( str_len * sizeof(char *) );

strcat(array[i],str1);
strcat(array[i]," ");

str1取自scanf,且短于60个字符。 array[i]来自动态字符串数组。

您是否知道导致问题的原因?它仅适用于大量scanf s。

3 个答案:

答案 0 :(得分:3)

至少有两种可能性:

  • 如果array[i]指向的缓冲区没有足够的空间,则会覆盖缓冲区的末尾,这通常会导致seg-fault。

  • 其中一个字符串没有正确地以空值终止,因此strcat只是开始遍历内存。

答案 1 :(得分:1)

array[i]指向无处,或者array[i]指向的缓冲区长度不足。

编辑:根据您发布的代码,array[i]指向的缓冲区最初包含未初始化的垃圾。您不能将strcat应用于包含未初始化垃圾的目标缓冲区。

在尝试strcat任何内容之前,让缓冲区保持空字符串

array[i][0] = '\0';
strcat(array[i],str1);
strcat(array[i]," ");

或者,从strcpy开始,然后执行strcat

strcpy(array[i],str1);
strcat(array[i]," ");

答案 2 :(得分:0)

array[i]=malloc( str_len * sizeof(char *) );

i这里有什么?如果i不在[0,str_len)范围内,那么您正在访问您可能无权使用的内存...