1

请告诉我为什么这个函数可以'\0'作为第二个参数,编译和崩溃?

char var[9];
/*some initialization of var */
strcat(var, '\0');
4

3 回答 3

4

该函数将 aconst char *作为第二个参数。你正在通过一个int.

char *strcat(char *restrict s1, const char *restrict s2);

您基本上是在strcat将取消引用\0作为指针进行欺骗-它取消引用NULL

于 2012-02-24T10:07:50.710 回答
1

的第二个参数strcat应该是一个指向以空字符结尾的字符数组的指针。 您的代码甚至不应该编译,但如果编译,那么结果将是undefined behavior

于 2012-02-24T10:08:13.033 回答
0

如果注释旨在描述以下行(而不是充当某些实际初始化的占位符而被省略),则还有第二种情况:

由于strcat()需要找到第一个参数的结尾以找出从哪里开始连接,并且您将其传递给未初始化的字符数组,因此它可能会在查找第一个字符串的终止字符时超出有效内存。在某些平台上读取有效内存之外可能会导致崩溃。

因此,第二个论点可能与它为什么会中断无关,尽管这当然也是错误的。

于 2012-02-24T10:13:16.553 回答