sprintf段错,而printf很好

cal*_*pto 0 c windows ubuntu cstring

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

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

如果需要更多背景信息,请告诉我.我希望我错过了一些愚蠢的事情,那两条线路绰绰有余.

hmj*_*mjd 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);
}
Run Code Online (Sandbox Code Playgroud)