我有一段简单的代码:
void create(){
char *username;
FILE *fptr;
fptr = fopen("~/retele/PROIECT/user.txt", "w");
printf("Type username: ");
scanf("%s", username);
fprintf(fptr, "%sn", username);
fclose(fptr);
}
我不明白,为什么我得到一个分段错误。
此时:
scanf("%s", username);
指针变量username
未初始化,它指向不可预测的内存部分。你基本上是在说"请将输入写入内存中的任何地方",并且不应该对系统抱怨感到惊讶,实际上你应该认为自己很幸运,它抱怨,调试可能的反应要困难得多。
(您还忽略了scanf的返回值,这是系统可以为您提供有关其他无法按预期执行的方法的信息的唯一方法。 指针尤其不指向任何可用于存储输入的内存区域。
您可以使用malloc()
进行更改。
您声明了一个名为 username 的指针,其类型为 char。但是你忘了为那个指针分配一个内存。
username = (char*)malloc(any_size_you_want);