gpt4 book ai didi

c - snprintf 格式化说明符

转载 作者:行者123 更新时间:2023-12-02 08:38:55 28 4
gpt4 key购买 nike

在我的代码中,我使用 snprintf 如下所示,并且能够看到以下行为

char text[30] = {0};

snprintf(text, sizeof(text), "%s", "hello");
printf("Interm... %s\n", text);
snprintf(text, "%20s", text);
printf("At the end ... %s\n", text);

输出

Interm... hello
At the end ...

如您所见,如果 snprintf 的源和目标相同,它会清除缓冲区。我希望输出采用 20s 格式说明符。我无法在第一步中执行此操作,因为我需要附加多个字符串并在最后一步执行格式说明符。

复制到临时缓冲区并从那里复制到原始缓冲区是唯一可能的解决方案吗?能否请您解释一下。

最佳答案

来自 snprintf man page

C99 and POSIX.1-2001 specify that the results are undefined if a call to sprintf(), snprintf(), vsprintf(), or vsnprintf() would cause copying to take place between objects that overlap (e.g., if the target string array and one of the supplied input arguments refer to the same buffer).

这意味着行

snprintf(text, "%20s", text)

无效。您关于使用额外的临时缓冲区的建议是正确的。

关于c - snprintf 格式化说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493323/

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