c-为什么strcat会导致崩溃

  • 本文关键字:崩溃 strcat c strcat
  • 更新时间 :
  • 英文 :


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

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

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

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

你基本上是在欺骗strcat去引用作为一个指针——它去引用了NULL

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

如果注释旨在描述以下行(而不是作为省略的实际初始化的占位符),则会出现第二种情况:

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

所以,第二个论点可能与它为什么破裂无关,尽管这当然也是错误的。

最新更新