gpt4 book ai didi

c - 如何在c中将数字存储在字符串中

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

我是 C 的新手,我正在尝试将整数存储在字符串中。任何人都可以说明我如何做到这一点。

我的代码:

char *str = (char *)malloc(5 * sizeof(char));
str[0] = 'h';

sprintf(&str[1], "%d", 34);
str[2] = 'e';


expected output: h34e
output: h3e

最佳答案

你不需要malloc 来获得那么小的内存,char str[5] 会在这种情况下也可以完成工作。还要记住你shouldn't cast malloc . sizeof(char) 始终为 1,所以你也可以省略它。您还应该始终检查的返回值malloc:

char *str = malloc(5);
if(str == NULL)
{
// error handling
}

不要忘记释放内存。

但我现在离题了。您的代码问题中的问题是

str[2] = 'e';

正在覆盖 "h34" 中的 4。这就是输出为 h3e 的原因。之后sprintf 调用内存如下所示:

index     0     1     2     3      4
+-----+-----+-----+------+-----+
| 'h' | '3' | '4' | '\0' | ??? |
+-----+-----+-----+------+-----+

正确的索引是3,不是2:

char str[5];
str[0] = 'h';

sprintf(&str[1], "%d", 34);
str[3] = 'e';
str[4] = '\0'; // making sure to terminate string

puts(str); // output is h34e

如果追加一个字符,一定不要忘记设置'\0' - 终止字节。这就是我在 str[4] = '\0' 中所做的。在你的例如,您很“幸运”,因为您没有覆盖 '\0'-终止字节,所以字符串仍然正确终止。

此外 snprintf 也采用长度,而不是您应该使用的长度sprintf。在这种情况下,您可以使用 sprintf,因为您知道缓冲区和数字的长度,你知道你不会写超出限制,这就是为什么在这种情况下可以使用 sprintf 而不是snprintf.

当然你可以用两行代码来完成:

char str[5];
sprintf(str, "h%de", 34);

但我也喜欢你的原始代码,因为它迫使你思考如何访问具有索引的数组元素以及字符串如何存储在内存中。作为练习,这是很好的。对于更严肃的项目,我不会以这种方式创建字符串。我会使用单行解决方案。

关于c - 如何在c中将数字存储在字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50070765/

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