gpt4 book ai didi

C文件读取循环总是中断

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

一直在研究 C,我正在开发一个简单的程序来读取文本文件、应用凯撒密码并写入新的输出文件。我的问题是应该构建我的输出字符串的 while 循环立即终止,声称下一个字符是 EOF,即使它显然不是。代码如下:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

#define MORD ".mord"

void die(const char *message)
{
if(errno) {
perror(message);
} else {
printf("ERROR: %s\n", message);
}

exit(1);
}

int main(int argc, char *argv[])
{
if(argc != 3) die("USAGE: dodsmord <filename> <offset>");
char *infilename = argv[1];
char *outfilename = strcat(infilename, MORD);
int offset = atoi(argv[2]);
char *outstr[1000];
FILE *infile = fopen(infilename, "r+");
FILE *outfile = fopen(outfilename, "w+");
if(infile == NULL) {
die("Could not open input file");
}
if(outfile == NULL) {
die("Could not open output file");
}
int c;
int i = 0;
printf("reading input file...\n");
while(1) {
c = fgetc(infile);
printf("c == EOF: %d\n", c == EOF ? 1 : 0);
printf("EOF: %d\n", EOF);
printf("c is now: %c\n", c);
if(c == EOF) break;
outstr[i] = c + offset;
i++;
}
printf("done reading! writing outstr to outfile...\n");
fwrite(outstr, sizeof(char), i, outfile);

printf("closing streams...\n");
fclose(infile);
fclose(outfile);

return 0;
}

如果我在 test.txt 上运行代码(其中包含不带引号的“abcdefg”),我会得到输出

reading input file...
c == EOF: 1
EOF: -1
c is now: �
done reading! writing outstr to outfile...
closing streams...

最佳答案

char *infilename = argv[1];
char *outfilename = strcat(infilename, MORD);

这与您认为的不同。

它设置 infilename 使其指向与 argv[1] 相同的 内存,然后 strcat 更改该内存以追加.mord.

然后它返回它以便 outfilename 指向内存。

因此,您将输入文件名更改为 .mord,当您尝试打开它时,嗯,我不知道到底会发生什么,这取决于是否它还存在。

你想要的是这样的:

char *infilename = argv[1];
char *outfilename = malloc (strlen (infilename) + strlen (MORD) + 1);
if (outfilename == NULL) {
handleOutOfMemoryHere();
}
strcpy (outfilename, infilename);
strcat (outfilename, MORD);
:
// weave you cypher magic here
:
free (outfilename);

该代码的第二行将为输出文件名提供一个单独的内存区域,strcpy/strcat 组合将正确构造它。

关于C文件读取循环总是中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23107659/

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