C sprintf SEGFULT,而printf正常
当C sprintf SEGFULT,而printf正常,c,windows,ubuntu,cstring,C,Windows,Ubuntu,Cstring,当printf(“%s/%s\n”,str1,str2)时,有没有什么简单的事情我可能忽略了打印出字符串导致程序崩溃 这只发生在Ubuntu(最新版本)上,我正在VirtualBox上运行。在Windows(主机)上,这两行运行时没有任何问题 如果需要更多的上下文,请告诉我。我希望我错过了一些愚蠢的事情,那两行就足够了。不同之处在于printf()正在写入标准输出,而sprintf()正在写入缓冲区str3。如果str3不够大,无法包含生成的字符串,则这是未定义的行为,可能是崩溃的原因 str3
printf(“%s/%s\n”,str1,str2)时,有没有什么简单的事情我可能忽略了当sprintf(str3,“%s/%s”,str1,str2)时,code>打印出字符串代码>导致程序崩溃
这只发生在Ubuntu(最新版本)上,我正在VirtualBox上运行。在Windows(主机)上,这两行运行时没有任何问题
如果需要更多的上下文,请告诉我。我希望我错过了一些愚蠢的事情,那两行就足够了。不同之处在于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);
}
区别在于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);
}
str3
是如何声明的?它能容纳多少个字符?具体来说,它能容纳strlen(str1)+strlen(str2)+1+1个字符吗?你给它分配了足够的内存吗?字符*
指向什么?答案必须是“null或random space”-任何一个都可能导致seg故障。哎呀。我设法忘记了使用malloc。哇,我blind@calccrypto:发生在我们最好的人身上;-)str3
是如何声明的?它能容纳多少个字符?具体来说,它能容纳strlen(str1)+strlen(str2)+1+1个字符吗?你给它分配了足够的内存吗?字符*
指向什么?答案必须是“null或random space”-任何一个都可能导致seg故障。哎呀。我设法忘记了使用malloc。哇,我blind@calccrypto:发生在我们最好的人身上;-)