gpt4 book ai didi

c - fgetc while 循环内的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:15 24 4
gpt4 key购买 nike

我在编写这段代码时遇到了一些麻烦。我可以让它在其他地方编译,但是当我尝试在我的机器上编译时,我遇到了段错误。

这是我收到的错误消息:

0x0000000000400dc6 in readFile (keyFileDir=0x401014 "k1.txt", 
plainTextFileDir=0x40101b "p1a.txt") at main.c:172
172 key[j++] = tolower((char) i);

代码如下:

FILE *keyFile;
FILE *plainTextFile;

keyFile = fopen(keyFileDir, "r");
plainTextFile = fopen(plainTextFileDir, "r");

fprintf(stdout, "\n\n");

if (keyFile == NULL) {
fprintf(
stderr,
"%s file not found, therefore we have no key.\n",
keyFileDir);
exit(0);
}
if (plainTextFile == NULL) {
fprintf(
stderr,
"%s file not found, therefore we have no plaintext.\n",
plainTextFileDir);
exit(0);
}

char *key, *plaintext;
int i, j, k, l = 0;

key = malloc(sizeof(char) * 10000);
plaintext = malloc(sizeof(char) * 10000);

while ((i = fgetc(keyFile)) != EOF) {
if (i != ' ') {
if ((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z')) {
key[j++] = tolower((char)i);
}
}
}

key[j] = '\0';

while ((k = fgetc(plainTextFile)) != EOF) {
if (k != ' ') {
if ((k >= 'a' && k <= 'z') || (k >= 'A' && k <= 'Z')) {
plaintext[l++] = tolower((char)k);
}
}
}

plaintext[l] = '\0';

作为引用,我将字符串“k1.txt”和“p1a.txt”作为参数。我是 C 的新手,所以我确信这是一个简单的问题。有什么想法吗?

最佳答案

您可能假设 int i, j, k, l = 0; 将它们全部初始化为 0;但它没有 - 只有 l 被初始化。
你需要这样写 int i=0, j=0, k=0, l = 0;

因此,您的 j 是一个随机值,而对于 k[j] =,您是在内存的随机位置写入,这是未定义的行为 =崩溃。

关于c - fgetc while 循环内的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185310/

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