【问题标题】:C Segmentation Fault: 11 fgetsC 分段错误:11 个 fget
【发布时间】:2018-02-11 11:56:15
【问题描述】:

我是编程新手,在尝试运行我的程序时遇到了这个错误。我在我的 Mac 上使用终端来编译它,这似乎工作正常,但是当我尝试运行该程序时,它只显示“分段错误:11”。我不知道我做错了什么或如何解决它。任何帮助将非常感激。这是我的程序的源代码:

#include <stdio.h>

int main(void) 
{
    int l;
    char name[l];
    printf("Hello. What's your name?\n");
    //scanf("%s", &name);  - deprecated
    fgets(name,l,stdin);
    printf("Hi there, %s", name);
    return 0;
}

【问题讨论】:

  • l 的值是多少?告诉我。
  • 我正在尝试从用户那里获取输入。 l 是我声明的变量,表示用户输入的字符串的长度
  • 但是在char name[l] 中使用l 之前,您是否接受过输入?
  • 没有。你会建议我如何解决这个问题?就像我说的,我是新手哈哈
  • scanf("%d",&amp;l); if(l&lt;=0) {/* error */} char name[l]; 但请确保您有 VLA 支持..&gt;=C99 您之前所做的是 UB(未定义行为)的示例作为练习检查 scanf/@987654328 的返回值@.

标签: c segmentation-fault fgets


【解决方案1】:

int l 没有初始化或赋值,现在它将垃圾值作为数组的大小,这就是它需要赋值或初始化的原因。

谢谢你的提问...

【讨论】:

  • 是的,事后我才意识到。我最终完全删除了该变量,只定义了 char *name。
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多