Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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
strcat和返回错误的差异_C - Fatal编程技术网

strcat和返回错误的差异

strcat和返回错误的差异,c,C,我可以使用以下代码连接字符串: char str1[50] = "hello"; printf("%s\n", strcat(str1, " goodbye")); 现在,如果我尝试这样做: printf("%s\n", strcat( "start", " CONCAT-WORD")); 我收到一个错误:中止陷阱:6。与此相关的两个问题。有时当我收到指针错误分配错误时,它显示为总线错误:11,有时它显示为中止陷阱:6或分段错误。为什么一个人有时会出现,而另一个人有时会出现?这是我遇到的唯一

我可以使用以下代码连接字符串:

char str1[50] = "hello";
printf("%s\n", strcat(str1, " goodbye"));
现在,如果我尝试这样做:

printf("%s\n", strcat( "start", " CONCAT-WORD"));
我收到一个错误:
中止陷阱:6
。与此相关的两个问题。有时当我收到指针错误分配错误时,它显示为
总线错误:11
,有时它显示为
中止陷阱:6
分段错误
。为什么一个人有时会出现,而另一个人有时会出现?这是我遇到的唯一三个C错误——这些是最常见的错误,还是还有其他非常常见的错误


其次,
strcat
为什么不允许直接写入字符串?在赋值中,它给出了char*strcat(char*str1,const char*str2),因此我认为我可以直接打印字符串,但我的想法当然是错误的。为什么会出现这种情况?

当您试图访问内存中没有地址的内存时,您会遇到一个
总线错误
,例如,如果您的内存中有一个
1,3,5
类型的地址,并且您的程序试图读取16位
0,2,4,6
,在这种情况下,您会遇到
总线错误
。当您试图读取分配的内存之外的内容时,会出现分段错误


对于
strcat
,您不能直接打印它,因为您必须在内存中创建足够的空间来存储您的价值。因此,如果您试图在
tata
中连接
toto
而不使用malloc,它将尝试在当前值上写入,因此您将得到一个奇妙的
分段错误

感谢您的解释,这非常有帮助。有没有一种方法可以执行“一行”字符串concat,或者您需要在它之前定义一个数组?我不知道。@Shared如果它们只是字符串文本,您可以通过让它们彼此相邻来连接它们:
printf(“一个简单的”concat”)。如果有一个或多个字符串变量,则只需留出空间并使用类似于strcat的内容。