[英]Why does strcat cause a crash?
请告诉我为什么这个函数可能将'\\0'
作为第二个参数,编译并崩溃?
char var[9];
/*some initialization of var */
strcat(var, '\0');
该函数将const char *
作为第二个参数。 您正在传递一个int
。
char *strcat(char *restrict s1, const char *restrict s2);
您基本上是在欺骗strcat
将\\0
取消引用作为指针-它取消引用NULL
。
strcat
的第二个参数应该是一个以null终止的字符数组的指针 。 您的代码甚至不应该编译,但是如果编译,则结果将是undefined behavior 。
如果该注释旨在描述以下行(而不是充当省略某些实际初始化的占位符),则存在第二种情况:
由于strcat()
需要找到第一个参数的末尾才能弄清楚从何处开始连接,并且将未初始化的字符数组传递给它,因此它可能会在寻找第一个字符串的终止字符时跳出有效内存。 在某些平台上读取外部有效内存可能会导致崩溃。
因此,第二个论点可能与它为什么破裂无关,尽管那当然也是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.