gpt4 book ai didi

c - fprintf 正在打印两个值而不是一个

转载 作者:行者123 更新时间:2023-11-30 14:49:28 26 4
gpt4 key购买 nike

我使用 fprintf 来将值打印到文件中。这是一个简化的代码片段。在这里,我希望文件包含单个值 0x0A。

int main() {
FILE *fp;
unsigned int hex[] = { 10 }; // Value to be written (10 = 0x0A)

fp = fopen("file.txt", "w"); // Open
fprintf(fp, "%s", hex); // Write
fclose(fp); // Close

return 0;
}

该文件如下所示(在十六进制编辑器中查看): enter image description here

它包含值 0x0D 和 0x0A,但我期望只有 0x0A。将hex 中的值设置为 0x0A 而不是 10 会产生相同的结果。

作为引用,这些是将 hex 值分别设置为 11 和 12 的结果: enter image description here enter image description here

哪些是正确的。

这里到底发生了什么?这个0x0D从哪里来?

最佳答案

抱歉,您没有指定您使用的是哪个操作系统/编译器,但我猜它是 Windows(或不是 unix/linux),因为它正在 printf(3) 输出上进行转换将 \n 字符 (0x0a) 序列转换为 CRLF seq \r\n (0x0d 0x0a )如果是这种情况并且您不希望完成翻译,只需将修饰符 b 添加到打开模式以显示为 "wb" 即可翻译尚未完成。

fp = fopen("file.txt", "wb"); // Open (for writing in binary mode)

如果您将程序移至 unix 机器,那么没有问题,因为这些修饰符包含在 POSIX 中。

注意

您的代码中有一个错误,因为您使用 %s 修饰符将无符号整数数组传递给 printf,这是不正确的。 %s 格式序列允许您仅传递一个指向 char 的指针,该指针指向以 null 结尾的字符串(您的指针很幸运,但您的代码遇到了未定义的行为)有效应该是:

char hex[] = { 10, 0 }; // decimal char literals.

char hex[] = "\012"; // octal char.  No provision for decimal char literals.

char hex[] = "\x0a"; // hex char literal.

关于c - fprintf 正在打印两个值而不是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587817/

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