gpt4 book ai didi

c - 使用sprintf函数后,字符串和C中整数数组的内存存储差异

转载 作者:行者123 更新时间:2023-12-02 05:27:56 25 4
gpt4 key购买 nike

你能解释一下在使用 sprintf 函数后在 C 中字符串和整数数组的内存分配吗?

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

int main() {
char str[10];
long long int i = 0, n = 7564368987643389, l;
sprintf(str, "%lld", n); // made it to a string
printf("%c%c", str[11], str[12]);
}

在上面的代码中,字符串大小为 10,包括空字符。我们如何访问其中的 11 和 12 个元素?该程序打印 43

最佳答案

这里

sprintf(str,"%lld",n);

n7564368987643389 转换为字符缓冲区并存储到 str。看起来像

str[0]     str[2]   str[4]    str[6]     str[8]   str[10]   str[12] ..
--------------------------------------------------------------------------------------
| 7 | 5 | 6 | 4 | 3 | 6 | 8 | 9 | 8 | 7 | 6 | 4 | 3 | 3 | 8 | 9 | \0 |
--------------------------------------------------------------------------------------
str str[1] str[3] str[5] str[7] str[9] str[11] ..

如您所见,str[11]4str[12]3。因此下面的 printf() 语句打印:

printf("%c %c",str[11],str[12]);

4 3

但是由于您已经声明了 10 个字符的 str 并且在 sprintf() 中您正试图存储超过 10 个字符,它会导致未定义的行为

关于c - 使用sprintf函数后,字符串和C中整数数组的内存存储差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57247807/

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