【问题标题】:Segmentation fault on fprintffprintf 上的分段错误
【发布时间】:2020-03-23 12:00:24
【问题描述】:

我有这段简单的代码:

void create(){
    char *username;
    FILE *fptr;
    fptr = fopen("~/retele/PROIECT/user.txt", "w");
    printf("Type username: ");
    scanf("%s", username);
    fprintf(fptr, "%s\n", username);
    fclose(fptr);   

}

我不明白,为什么会出现分段错误。

【问题讨论】:

  • username 还没有指向任何地方。

标签: c linux segmentation-fault


【解决方案1】:

此时:

scanf("%s", username);

指针变量username 未初始化,它指向不可预测的内存部分。您基本上是在说“请将输入写入内存的任何位置”。并且不应该对系统抱怨感到惊讶,实际上你应该认为自己很幸运它抱怨,调试可能的反应要困难得多。
(您也忽略了 scanf 的返回值,这将是系统可以为您提供有关其他未能按预期执行的信息的唯一方法。) 尤其是指针不指向任何可用于存储输入的内存区域。
您可以使用 malloc() 更改它。

【讨论】:

    【解决方案2】:

    您声明了一个名为 username 的指针,它是 char 类型的。但是您忘记为该指针分配内存。

    username = (char*)malloc(any_size_you_want);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2021-07-19
      • 2016-10-22
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多