请告诉我为什么这个函数可能会将'\0'
作为第二个参数,编译并崩溃?
char var[9];
/*some initialization of var */
strcat(var, '\0');
答案 0 :(得分:4)
该函数将const char *
作为第二个参数。您正在传递int
。
char *strcat(char *restrict s1, const char *restrict s2);
您基本上欺骗strcat
取消引用\0
作为指针 - 它取消引用NULL
。
答案 1 :(得分:1)
strcat
的第二个参数应该是指针到以null结尾的字符数组。 你的代码甚至不应该编译,但如果是,那么结果将是未定义的行为。
答案 2 :(得分:0)
如果注释是为了描述以下行(而不是作为某些实际初始化的占位符而被省略),那么还有第二种情况:
由于strcat()
需要找到第一个参数的结尾以便找出从哪里开始连接,并且你传递了一个未初始化的字符数组,它可能会在寻找第一个字符串的终止字符。在有效内存外读取可能会导致某些平台崩溃。
所以,第二个论点可能与它破裂的原因无关,尽管那当然也是错误的。