如何在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 []”初始化的字符串时会出现分段错误?