为什么strcat导致崩溃?

时间:2012-02-24 10:05:49

标签: c strcat

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

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

3 个答案:

答案 0 :(得分:4)

该函数将const char *作为第二个参数。您正在传递int

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

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

答案 1 :(得分:1)

strcat的第二个参数应该是指针到以null结尾的字符数组。 你的代码甚至不应该编译,但如果是,那么结果将是未定义的行为

答案 2 :(得分:0)

如果注释是为了描述以下行(而不是作为某些实际初始化的占位符而被省略),那么还有第二种情况:

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

所以,第二个论点可能与它破裂的原因无关,尽管那当然也是错误的。