Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C sprintf SEGFULT,而printf正常_C_Windows_Ubuntu_Cstring - Fatal编程技术网

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:发生在我们最好的人身上;-)