c - 如何在带有结构的 C 中的 if/else 循环中使用 realloc?
问题描述
我在 C 语言中有一个问答游戏,当用户输入错误答案和该问题的相应正确答案时,我使用结构来保存。首先,我使用 malloc 为单个结构分配内存。
结构:
typedef struct
{
char* wrongAnswers;
char* corrections;
} Corrections;
马洛克:
Corrections* corrections = (Corrections*)malloc(sizeof(Corrections));
稍后在我的程序中,我有一个功能,错误答案会增加一个“incorrectAnswers”变量,该变量用于重新分配内存以允许存储新的错误答案及其相应的正确答案。
代码:
// Extract characters from file and store in character c
for (c = getc(fPointerOpen); c != EOF; c = getc(fPointerOpen)) {
if (c == '\n') // Increment count if this character is newline
numberOfLines++;
}
for (int i = 0; i < numberOfLines; i++) {
int lengthOfQuestion = 150;
if (v == 0) {
printf("Correct\n");
score++;
}
else {
printf("Incorrect\n");
incorrectAnswers++;
corrections = (Corrections*)realloc(corrections, incorrectAnswers * sizeof(Corrections));
corrections[i].wrongAnswers = malloc(sizeof(char) * lengthofanswer);
corrections[i].wrongAnswers = lines[i].userAnswers;
corrections[i].corrections = malloc(sizeof(char) * lengthofanswer);
corrections[i].corrections = lines[i].answers;
}
printf("Your score is %d/%d\n", score, (i + 1));
}
我收到一个错误,具体取决于输入正确和错误答案的顺序。我已经尝试在程序的不同部分使用 free() 并且我注意到当我输入错误答案作为我程序的最后一个条目/如果我输入正确然后错误的答案时,该错误将始终出现。为什么会这样?我的理解是我执行 realloc 不正确。
解决方案
您应该使用strcpy
复制字符串,不要使用=
在 c 中分配字符串。
strcpy(corrections[i].wrongAnswers,lines[i].userAnswers);
strcpy(corrections[i].corrections,lines[i].answers);
每次使用malloc
orrealloc
时,都应该检查这些函数的返回值。
推荐阅读
- mongoose - Query with mongoose! aggregate
- python - Passing an Object into Include Template Tag Django
- android - How to call out the drawer when I am using Tab navigation to show other screen [react native]
- .net - 通过引用 Winform 传递 Hashtable;取消 BGW 时在 BGW 中使用此变量不更新最初传递的哈希表
- php - 验证错误后表单未显示选择下拉列表
- powershell - 使用 PowerShell 从 Google Drive 下载大文件
- c - cnn.com 返回 CURLE_OK,但没有返回文本。C
- flutter - 如何在彼此内部使用 2 个 getx 控制器?
- python - Networkx 节点可达性 - 如果条件
- python - Spyder启动时总是弹出cmd窗口