繁体   English   中英

为什么strcat导致崩溃?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM