gpt4 book ai didi

c - sprintf() 程序未定义返回值

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:54 27 4
gpt4 key购买 nike

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

int main(int argc, char **argv)
{
char *c = (char *)malloc(sizeof(char) * 30);

if (argc < 2)
{
fprintf(stderr, "%s", "argc < 2\n");
exit(1);
}

sprintf(c, "sprintf() string : %s\t argc: %i", argv[1], argc);
fprintf(stdout, "%s\n", c);
fprintf(stdout, "%s", "Done!\n");
free(c);

return 0;
}

我在两个编译器上编译了这个程序,都产生了相同的运行时错误。但是我无法确定这个错误。我是否在 sprintf() 中正确地格式化了字符串?有什么我忘了解释的吗?

我用 argv[1] = "Sunday"的参数运行这个程序

最佳答案

您在 malloc 中将 c 的大小设置为 30 字节。

然后在 sprintf 中写入 28 个字节,加上 argv[1] 字符串加上 argc 作为字符串。这几乎肯定会超过 30 个字节。

您需要计算为 c 正确分配 malloc 所需的实际大小。或者您应该使用 snprintf 而不是 sprintf,您可以使用它来将写入的字符数限制为 30 并避免崩溃。

关于c - sprintf() 程序未定义返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819516/

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