在下面的代码中,在注释strcat时,str1会返回为最初声明的,直到单词"享受";但是在使用strcat时,它抛出segfault。我很困惑为什么没有进行串联,因为我声明了一个动态分配的字符串。
char * kitchen(int cost)
{
cost = 100;
char *str1 = (char *)malloc(sizeof(char)* 70);
str1 = "n Food's ready bruh, Enjoyy!!";
char *str2 = (char *)malloc(sizeof(char)* 70);
sprintf(str2, " But do pay %d", cost );
strcat(str1, str2);
return str1;
}
更换
str1 = "n Food's ready bruh, Enjoyy!!";
带
strcpy(str1, "n Food's ready bruh, Enjoyy!!");
现场演示。
尽管有动态分配,"n Food's ready bruh, Enjoyy!!"
仍然是一个字符串文字,并且仍然被C视为只读。您的赋值仅将str1
指向该字符串文字。