gpt4 book ai didi

c - 循环写入文件但出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:39:54 25 4
gpt4 key购买 nike

当我运行这个程序时,它允许我输入名字,然后它给我一个段错误。

我不知道为什么会发生这种情况,也不知道如何消除它。

#include <stdio.h>

int main (void)
{
FILE *fp;

fp = fopen("list.txt","a+");
if (fp == NULL){
printf("File list.txt could not be opened.");
}

for(int i=0;i<3;i++){
char *name;
char *str;
char *sta;
printf("Please enter your name: ");
scanf("%s",name);
printf("Please enter your street: ");
scanf("%s",str);
printf("Please enter your state: ");
scanf("%s",sta);
fprintf(fp,"%s,%s,%s\n",name,str,sta);
}
fclose(fp);
}

最佳答案

当你尝试编译它时,编译器到底会说什么?从您使用 scanf 的方式来看,您的问题很可能是这样。是的,scanf 获取变量的地址/指针,但此时您拥有的 char * 变量尚未初始化,并且很可能其中包含垃圾。请改用字符数组 (char[]) 变量。或者,使用某种替代方法来初始化 char 指针 (char *),方法是调用动态内存分配器(如 malloc),或存储其他一些预先存在的字符数组的地址。

还有额外的好处:是的,char name[10] 与 char *p= malloc(10) 相同。 Char name[10] 是一个 10 个字符的数组,每个字符的大小为一个字节,char“name”变量隐式地是指向这 10 个字符的第一个元素的指针,而 malloc(10) 返回一个指向 10 个字节的指针在内存中。两者都生成指向 10 个字节的指针。

关于c - 循环写入文件但出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com