【问题标题】:Why am I getting a segmentation fault from scanf loop?为什么我从 scanf 循环中得到分段错误?
【发布时间】:2016-10-30 08:27:43
【问题描述】:

注释掉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]);
}

【问题讨论】:

  • 字符串被扫描多长时间?尝试 malloc 大数组,看看是否能解决问题。
  • 扫描到nameArray[i],而不是&amp;nameArray[i]。还使用"%24s" 作为格式字符串并检查scanf 的返回值。

标签: c arrays pointers segmentation-fault


【解决方案1】:

首先你需要改变

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 的返回值

【讨论】:

    【解决方案2】:

    因为nameArray[i]已经是一个指针,从malloc获得,所以你只需要把那个指针传递给scanf,使用

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

    没有&amp;

    【讨论】:

      【解决方案3】:

      你必须注意分配; 在您的情况下,您只分配了 10 个 namearray 元素

      您必须为要扫描的所有变量进行分配: 用 numNames 更改 10

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

      并且 & 符号在指针情况下与普通字符一起使用,不要使用它;

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2014-05-23
        相关资源
        最近更新 更多