0

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

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

如果需要更多上下文,请告诉我。我希望我错过了一些愚蠢的事情,并且那两条线绰绰有余。

4

1 回答 1

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);
}
于 2012-09-18T21:09:19.323 回答