gpt4 book ai didi

c - 在不同迭代中使用 fscanf/fgets 读取文件时随机崩溃

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

我正在尝试读取 while questions.txt,其格式如下:

Question\n
Difficulty:Cost:Prize\n
Correct Answer\n
Answer 1\n
.
.
.
Answer i\n
\n

以下函数读取 questions.txt 并将其存储到临时节点以添加到链表中。

pQuestionType loadQuestions(pQuestionType pFirst)
{
pQuestionType pTemp = malloc(sizeof(pQuestionType));
FILE* pFile;
string sFilename, sTemp;
char cDump;
int nTemp, n=0;
gotoxy(0,0);
system("cls");
printf("Enter file name: ");
gets(sFilename);
pFile = fopen(sFilename, "rt");
while(!feof(pFile))
{
printf("Iteration \n");
fgets(sTemp, 255, pFile);
strcpy(pTemp->sQuestion, sTemp);
pTemp->sQuestion[strlen(sTemp)-1] = '\0';
printf("Add question success\n");

fscanf(pFile, "%d%c", &nTemp, &cDump);
pTemp->nDifficulty = nTemp;
printf("Add difficulty success\n");

fscanf(pFile, "%d%c", &nTemp, &cDump);
pTemp->nCost = nTemp;
printf("Add cost success\n");

fscanf(pFile, "%d%c", &nTemp, &cDump);
pTemp->nWinnings = nTemp;
printf("Add winnings success\n");

fgets(sTemp, 255, pFile);
strcpy(pTemp->sCorrect, sTemp);
pTemp->sCorrect[strlen(sTemp)-1] = '\0';
strcpy(pTemp->sAnswers[0], sTemp);
pTemp->sAnswers[0][strlen(sTemp)-1] = '\0';
printf("Add answer success\n");

for(n=1; n<10; n++)
{
fgets(sTemp, 255, pFile);
if(*sTemp == '\n')break;
strcpy(pTemp->sAnswers[n], sTemp);
pTemp->sAnswers[n][strlen(sTemp)-1] = '\0';
}
printf("Add choices success\n");

printf("\n");
pFirst = addQuestion(pFirst, pTemp);
if(*sTemp == EOF) break;
}
fclose(pFile);

return pFirst;
}

当程序尝试读取我的第三个问题的难度时,我在第三次迭代时崩溃了。是什么原因导致此问题以及我该如何修复我的代码?

最佳答案

pQuestionType pTemp = malloc(sizeof(pQuestionType));

如果pQuestionType是一个指针类型(而且它似乎是因为pFirstpTemp都没有* 字符靠近其声明),那么它的大小将是指针的大小(当前可能是 4 或 8)。

所以这个malloc几乎肯定不会给你足够的内存。您需要使用 sizeof(*pTemp) 来代替。

关于c - 在不同迭代中使用 fscanf/fgets 读取文件时随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13778291/

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