gpt4 book ai didi

c - 将乱码写入文件?

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

所以我正在打开一个文件,让我们将该文件称为 key.txt

    FILE *fp;
fp = fopen("key.txt", "r");

现在假设我有另一个文件 (fa),我用代码“a”打开并附加到它。现在我从 fp 读取所有字符并将每个字母字符附加到文件 fp,但它附加的不止于此。

    char c;
do {
c = getc(fp);
if(isalpha(c)){
fprintf(fa, &c);
fprintf(fa, "\n");
}
} while(c != EOF);

好的,这对我来说看起来不错,现在它正在将每个字母字符添加到文件中,但问题是,它甚至向单行文本添加了 MORE 个字符。我试图查明这个问题。这是一个示例,在 key.txt 中我们有

    lol
xd

输出文件fa有内容

    l<82>^0)y^?
o<82>^0)y^?
l<82>^0)y^?
x<82>^0)y^?
d<82>^0)y^?

所以我不明白这里发生了什么。我该如何解决?我不确定具体问题是什么

最佳答案

您使用的 fprintf() 有误。来自man page , 预期的格式是

int fprintf(FILE *stream, const char *format, ...);

其中,第一个参数是文件指针,第二个是转换说明符,第三个是提到的转换说明符的参数。

引用 C11,章节 §7.21.6.1,fprintf(),用于格式说明符

c

If no l length modifier is present, the int argument is converted to anunsigned char, and the resulting character is written. [...]

所以,如果你想写一个字符,你需要使用类似的东西

fprintf(fa, "%c", c);   //%c for character, no '&' needed before variable

也就是说,getc() 返回一个 int,因此您应该在 int 变量中捕获返回值。

故事的寓意:启用编译器警告。

关于c - 将乱码写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446099/

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