注释掉scanf循环后,分段错误错误消失。为什么该循环给我分段错误?

char** nameArray =  malloc(numNames * sizeof(char *));

for(i =0; i< 10; i++) {
  nameArray[i] = malloc(25 * sizeof(char));
}

for (i = 0; i< numNames; i++) {
  scanf("%s", &nameArray[i]);
}

for (i =0; i<numNames; i++) {
  free(nameArray[i]);
}

最佳答案

首先你需要改变

for(i =0; i< 10; i++) {


for(i =0; i< numNames; i++) {

因为您需要创建足够的条目。

另外你需要改变这一行
scanf("%s", &nameArray[i]);


scanf("%s", nameArray[i]);

因为nameArray[i]是所需的字符指针。

而且最好用
scanf("%24s", nameArray[i]);

因为这样可以防止缓冲区溢出。另外,检查scant的返回值也是一个好主意

08-16 10:29