首页 > 解决方案 > fprintf 上的分段错误

问题描述

我有这段简单的代码:

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);   

}

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

标签: clinuxsegmentation-fault

解决方案


在此刻:

scanf("%s", username);

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


推荐阅读