【发布时间】:2014-10-22 08:30:25
【问题描述】:
我有一个名称如下的文本文件:
"玛丽","帕特里夏","琳达","芭芭拉","伊丽莎白","詹妮弗","玛丽亚","苏珊","玛格丽特",
我已使用以下代码尝试将名称放入数组中:
char * names[9];
int i = 0;
FILE * fp = fopen("names.txt", "r");
for (i=0; i < 9; i++) {
fscanf(fp, "\"%s\",", names[i]);
}
当我尝试运行该程序时出现分段错误。我已经仔细调试过,当我尝试读取第二个名称时,我注意到错误出现了。
有人知道我的代码为什么不能工作,以及为什么会发生分段错误吗?
【问题讨论】:
-
您必须为扫描的名称保留空间。例如。定义
char names[MAX_NAME_COUNT][MAX_NAME_LENGTH];并使用您提供的代码读入它。 -
编译时启用所有警告(
-Wall或类似的),你会明白为什么。 -
代码创建了一个包含 9 个指向 char 的指针的数组。但是,没有分配存储实际数据输入所需的内存区域。
-
您的代码缺少对 fopen() 返回代码的检查,因此代码不知道 fopen() 是成功还是失败。您的代码缺少对 fscanf() 返回代码的检查,因此代码不知道 fscanf() 是成功还是失败。
-
我很想投票结束这个问题。我们看到很多关于
scanf的问题,只是缺少将适当的缓冲区传递给它,并且在 SO 上有大量重复项。但是这里其实有两个问题,另一个在标题中比在正文中更能体现出来,所以我不知道。