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的内容。