请告诉我为什么这个函数可以'\0'
作为第二个参数,编译和崩溃?
char var[9];
/*some initialization of var */
strcat(var, '\0');
该函数将 aconst char *
作为第二个参数。你正在通过一个int
.
char *strcat(char *restrict s1, const char *restrict s2);
您基本上是在strcat
将取消引用\0
作为指针进行欺骗-它取消引用NULL
。
的第二个参数strcat
应该是一个指向以空字符结尾的字符数组的指针。 您的代码甚至不应该编译,但如果编译,那么结果将是undefined behavior。
如果注释旨在描述以下行(而不是充当某些实际初始化的占位符而被省略),则还有第二种情况:
由于strcat()
需要找到第一个参数的结尾以找出从哪里开始连接,并且您将其传递给未初始化的字符数组,因此它可能会在查找第一个字符串的终止字符时超出有效内存。在某些平台上读取有效内存之外可能会导致崩溃。
因此,第二个论点可能与它为什么会中断无关,尽管这当然也是错误的。