从文件读取时程序崩溃
问题描述:
#include <stdio.h>
#include <string.h>
struct candidate
{
char candidateName[20];
int votes;
};
Initialize()
{
char firstname[10];
char lastname[10];
FILE* ifp;
int i;
struct candidate electionCandidates[7];
ifp = fopen("elections.txt", "r");
for (i = 0; i<7; i++)
{
strcpy(electionCandidates[i].candidateName, "aaaaa");
electionCandidates[i].votes = 0;
}
for (i=0; i<7; i++)
{
memset(&firstname[0], 0, sizeof(firstname));
memset(&lastname[0], 0, sizeof(firstname));
fscanf(ifp, "%s %s", &firstname, &lastname);
strcat (firstname, " ");
strcat (firstname, lastname);
strcpy (electionCandidates[i].candidateName, firstname);
printf("%s", electionCandidates[i].candidateName);
}
}
int main()
{
Initialize();
return(0);
}
上述代码应该读取文件中的名字和姓氏,并将它们添加到结构的candidateName部分。当我运行这个程序时,它会分配并打印起始名和姓,但是会立即崩溃。从文件读取时程序崩溃
该文件是在
first last
first last
first last
格式等
我觉得这可能是与它不打算读取下一行,但我不知道该怎么办所以。任何帮助将不胜感激。
答
问题,我看到:
问题1
行:
fscanf(ifp, "%s %s", &firstname, &lastname);
是一个问题,如果在输入文件名和/或姓长于9个字符。
要处理该问题,请指定要读取的最大字符数。此外,从类型的角度来看,使用firstname
而不是&firstname
。
fscanf(ifp, "%9s %9s", firstname, lastname);
问题2
线条
strcat (firstname, " ");
strcat (firstname, lastname);
是一个问题,如果的firstname
长度+的lastname
长度大于8
可以使用:
strcpy (electionCandidates[i].candidateName, firstname);
strcat (electionCandidates[i].candidateName, " ");
strcat (electionCandidates[i].candidateName, lastname);
解决这个问题。
'firstname'只为9个字符和终止空字符分配足够的空间。 'firstname' + space +'lastname'是否可能比这个长? – 2014-09-05 21:58:08
似乎很多人今天有相同的功课:http://*.com/questions/25691729/how-do-i-assign-values-from-text-file-to-a-structure-of-arrays-在-C – 2014-09-05 22:04:04