我正在写这个代码有点麻烦。我能够在其他地方编译它,但是当我尝试在我的机器上编译时,我遇到了一个段错误。
以下是我收到的错误消息:
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';
作为参考,我正在喂食字符串&#34; k1.txt&#34;和&#34; p1a.txt&#34;作为参数。我对C很新,所以我相信这是一个简单的问题。有什么想法吗?
答案 0 :(得分:2)
你可能假设int i, j, k, l = 0;
将所有这些都初始化为0;但它没有 - 只有l
被初始化
你需要写int i=0, j=0, k=0, l = 0;
因此,您的j
是一个随机值,而k[j] =
是您在随机的内存位置写的,这是未定义的行为=崩溃。
答案 1 :(得分:0)
除了@Aganju所说的(你可能很幸运,价值可能会从0开始(例如,在我的C日,例如在Sun Solaris上),还有一个事实是你永远不会限制你的循环缓冲区的大小,如果您读取的文件大于10000字节缓冲区,则可能会遇到内存问题。