当printf("%s/%s\n", str1, str2);
打印出字符串而sprintf(str3, "%s/%s", str1, str2);
导致程序崩溃时,我可能忽略了一些简单的事情吗?
这只发生在我在VirtualBox上运行的Ubuntu(最新版本)上。在Windows(主机)上,两条线路都没有任何问题。
如果需要更多背景信息,请告诉我。我希望我错过了一些愚蠢的事情,那两行就足够了。
答案 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);
}