如何在C 中连接char *变量

#include  #include  #include  int main() { char *hi = "bye"; char *bye = "abc"; strcat(hi, bye); printf("%s\n", hi); } 

我如何连接这些变量? 我正在尝试的一切都崩溃了

你不能。 字符串文字是不可修改的。

你可以制作一个可修改的副本。 这里使用字符串文字的内容初始化char数组。

 char hi[10]="bye"; ... 

这会奏效。

在您的情况下,通过在字符串文字上使用strcat ,您将调用未定义的行为。

从6.4.5p7

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的。 如果程序试图修改此类数组,则行为未定义

同样来自J2:来自标准的未定义行为列表

该程序试图修改字符串文字


请注意,即使字符串文字是可修改的,也不是连接字符串的定义行为。 连接字符串时确保连接的字符串有足够的空间 – 否则它会尝试写入char数组,而char数组本身将调用未定义的行为。 根据我在本段中所说的内容(使用字符串文字的值初始化的char数组),您可以亲眼看到一件事,

 char hi[]="bye"; 

然后使用strcat会导致未定义的行为。

字符串文字是不可变的 。 任何修改它的尝试都会调用未定义的行为

如果将目标字符串存储在数组中,您将能够修改它:

 int main() { char hi[10] = "bye"; char *bye = "abc"; strcat(hi, bye); printf("%s\n", hi); } 

引用C标准草案N1570,第6.4.5 / 7节:

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的。 如果程序试图修改此类数组,则行为未定义。

查看更多信息为什么在写入使用“char * s”而不是“char s []”初始化的字符串时会出现分段错误?