gpt4 book ai didi

c - 为什么 snprintf 复制不同的值,即使每次都将相同的变量复制到字符串数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:11 25 4
gpt4 key购买 nike

我的问题总结在下面的简单代码中。我希望在两个 printfs 中每次都将相同的值复制到这个字符串。但我看到一个语句的 ascii 值被复制,而另一个实际值被复制。为什么会有这种差异?

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

int main()
{
char string[20];
int id = 1;
memset(string,0,20);
snprintf((char *) (string),19,"%d",id);
snprintf((char *) (string+10),19,"%d",id);
return 0;
}

输出(使用gdb)

(gdb) p  string
$1 = "1\0\0\0\0\0\0\0\0\0\61\0\0\0\0\0\0\0\0"
(gdb)

最佳答案

两次 snprintf 调用产生的结果没有区别。在这两种情况下,字符“1”都写入给定位置,后跟一个空字符。

gdb 显示数据的方式有所不同。对于 string 的字节 0 和 1,它显示:

1\0

表示字符“1”后跟代码为0的字符,也称为空字符。对于 string 的字节 10 和 11,它显示:

\61\0

表示八进制代码为 61 的字符后跟代码为 0 的字符。“1”的 ASCII 代码八进制为 61(十进制为 49),因此这与字节 0 中的值相同,当然假设您的 C 实现使用 ASCII。

唯一的区别在于显示。此显示是 gdb 行为的结果,而不是您的程序。我们可以推测 gdb 以八进制显示字节 10 中的“1”而不是文字“1”,因为它前面或周围是不可打印的字符,或者因为它在结束普通字符串的空字符之后。

关于c - 为什么 snprintf 复制不同的值,即使每次都将相同的变量复制到字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227157/

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