#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”的参数运行这个程序
答案 0 :(得分:3)
您在malloc上将c设置为30个字节。
然后在sprintf中你写了28个字节,加上argv [1]字符串加上argc作为字符串。这几乎肯定会超过30个字节。
您需要正确计算malloc for c所需的实际大小。或者您应该使用snprintf而不是sprintf,您可以使用它来限制写入30的字符数并避免崩溃。
答案 1 :(得分:2)
您将30
个字符打印到c
以上。要在发生这种情况时切断输出,而不是崩溃,请执行以下操作:
snprintf(c, 30, "bla bla....