gpt4 book ai didi

c - sprintf : printing a percent followed by 0-padded hex

转载 作者:行者123 更新时间:2023-12-01 09:57:14 25 4
gpt4 key购买 nike

我以为我理解 printf,但我想不是。我有:

char sTemp[100];
sprintf(sTemp, "%%%02x", (unsigned)c);

我认为 c 是一个 unsigned char,我认为是一个换行符,但出于某种原因,我得到的结果是

0x0.000000000000ap-1022

如果我将格式字符串中的“x”设为“X”,则输出字符串中会出现“X”。

最佳答案

我完全误解了我在这个答案的第一个版本中的实验结果;到处道歉。

当 c 是 '\n'sprintf() 调用的结果是这个字符串:

"%0a"

我相信你正在做:

printf(sTemp);

这与:

printf("%0a");

这是十六进制浮点输出的有效格式字符串。但是,您没有传递浮点变量,因此 printf() 会提取附近堆栈中的任何内容,并将其用作要格式化的值。

相反,做:

printf( "%s", sTemp );

您应该会看到预期的“%0a”。

请注意,当您使用 printf(sTemp) 时,clang 可能还有其他编译器会发出警告:

so.c:9:12: warning: format string is not a string literal (potentially insecure) [-Wformat-security]

正是因为这种事情:堆栈上的内存被访问了,这是不应该的。

关于c - sprintf : printing a percent followed by 0-padded hex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24915466/

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