sprintf()程序未定义的返回值

时间:2014-05-23 01:05:30

标签: c runtime runtime-error printf

#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”的参数运行这个程序

2 个答案:

答案 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....