gpt4 book ai didi

c - 调试器说我有未初始化的变量

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

经过几个小时的搜索,我变得绝望,因为根据 Valgrind 和 Dr. Memory 的说法,我找不到我显然拥有的未初始化的读取,所以我会在这里寻求帮助。我使用了代码块的调试器及其变量监视,但我所看到的一切都按计划顺利进行。

#define ADRESA "adressbook.txt"

struct Adress
{
char name[31], lastname[31], email[48], major[10];
int year;
};

int read(struct Adresa array[])
{
char temp_line[121];
int i = 0, j, c = 0;
FILE* adressbookf = fopen(ADRESA, "r");
if (adressbookf != NULL)
{
printf("File successfully loaded.\n")

while (fgets(temp_line, 121, adressbookf) != NULL && strlen(temp_line) > 0)
{
j = 0;
c = 0;
while (temp_line[c] != ',' && c < strlen(temp_line))
{
array[i].name[j] = temp_line[c];
++j;
++c;
}
++c;
array[i].name[j] = '\0';
j = 0;

while (temp_line[c] != ',' && c < strlen(temp_line))
{
array[i].lastname[j] = temp_line[c];
++j;
++c;
}

++c;
array[i].lastname[j] = '\0';
j = 0;

while (temp_line[c] != ',' && c < strlen(temp_line))
{
array[i].email[j] = temp_line[c];
++j;
++c;
}

++c;
array[i].email[j] = '\0';
j = 0;

while (temp_line[c] != ',' && c < strlen(temp_line))
{
array[i].major[j] = temp_line[c];
++j;
++c;
}

++c;
array[i].year = temp_line[c] - 48;
++i;
}
fclose(adressbookf);
return i;
}
else return 0;

}

int main()
{
int number_of_elements = 0;
struct Adress adressbook[1000];
printf("Welcome.\n");
number_of_elements = read(adressbook);

...

显然,出错的行是 32、43 和 54(条件跳转或移动取决于未初始化的值)。

该文件看起来像这样:

name,lastname,nlastname1@x.com,EE,1

john,doe,jdoe1@x.com,AA,1

它通常以包含“\n”的尾随行结尾(但该文件不一定存在)。

我的程序中还有一个错误,但我必须将整个程序复制到此处。我希望这一问题能够得到解决。

如果有人愿意编译它并以这种方式检查它,我很乐意发布它。

这是来自 Valgrind 的错误消息:

Conditional jump or move depends on uninitialised value(s) at 0x4010F1: ucitaj (bs_test_2366.c:156) by 0x40192E: _main (bs_test_2366.c:255) by 0x4021EE: main (bs_test_2366.c:385)

Conditional jump or move depends on uninitialised value(s) at 0x4011AD: ucitaj (bs_test_2366.c:167) by 0x40192E: _main (bs_test_2366.c:255) by 0x4021EE: main (bs_test_2366.c:385)

Conditional jump or move depends on uninitialised value(s) at 0x401269: ucitaj (bs_test_2366.c:178) by 0x40192E: _main (bs_test_2366.c:255) by 0x4021EE: main (bs_test_2366.c:385)

注意第156、167行分别是第178行、第二行和第三行

while (temp_line[c] != ',' && c < strlen(temp_line))

分别。 255 是调用函数的行,385 是在我的程序之外。

最佳答案

我发现一个可能的问题。在第一行中,在检查范围之前使用 c 进行索引。

        while (temp_line[c] != ',' && c < strlen(temp_line))
{
array[i].name[j] = temp_line[c];
++j;
++c;
}

尝试这样写:

        while (c < strlen(temp_line) && temp_line[c] != ',')
{
array[i].name[j] = temp_line[c];
++j;
++c;
}

关于c - 调试器说我有未初始化的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28000438/

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