注释掉 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]);
as nameArray[i]
是一个需要的字符指针。
而且使用起来会更好
scanf("%24s", nameArray[i]);
因为这可以防止缓冲区溢出。检查 scant 的返回值也是一个好主意
关于c - 为什么我从 scanf 循环中收到段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40327254/