这会导致分段错误:
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。
答案 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)
范围内,那么您正在访问您可能无权使用的内存...