sprintf段错,而printf很好

时间:2012-09-18 21:05:37

标签: c windows ubuntu cstring

printf("%s/%s\n", str1, str2);打印出字符串而sprintf(str3, "%s/%s", str1, str2);导致程序崩溃时,我可能忽略了一些简单的事情吗?

这只发生在我在VirtualBox上运行的Ubuntu(最新版本)上。在Windows(主机)上,两条线路都没有任何问题。

如果需要更多背景信息,请告诉我。我希望我错过了一些愚蠢的事情,那两行就足够了。

1 个答案:

答案 0 :(得分:6)

不同之处在于printf()正在写入标准输出,而sprintf()正在写入缓冲区str3。如果str3不足以包含结果字符串,那么它是未定义的行为,并且可能是崩溃的原因。

str3必须正确初始化(不是NULL或未初始化),并且必须指向足够的空间来容纳strlen(str1) + strlen(str2) + 2个字符。 + 2/和终止空字符。例如:

char* str3 = malloc(strlen(str1) + strlen(str2) + 2);
if (str3)
{
    sprintf(str3, "%s/%s", str1, str2);
}