首页 > 解决方案 > 为什么连接和复制大于数组大小的字符串没有错误?

问题描述

char string[5] = "stringBiggerThan5";   // shows error. Okay.
strcpy(string, "big string");   // overflow. seg fault. Perfect!

char[]但是,向 a 中添加一个大于数组大小的字符串不会显示任何错误:

char string[5];
strcat(string, "stringBiggerThan5");   // no error. Why??!

同样,没有错误:

char* simple_string_func() {
  static char string[5];
  strcpy(string, "hugeBigString");
  strcat(string, "tryingToOverflowYou");
  
  return string;    //returns all perfectly, without errors
}

请注意,做大strcpystatic char[5]不显示overflow errorsegementation fault现在!为什么?


如果我为returnin 函数分配字符串的方法是理想的/好的,请公开评论。

标签: arrayscstringstack-overflowbuffer-overflow

解决方案


区别在于您看到的编译时检查和 C 没有的运行时检查。

我建议你再考虑一下你想要做什么,关注保存字符串所需的内存以及它来自哪里。如果不涉及线程,事情就更简单了,但是如果你的例程被调用两次,你的例程当前就会出现问题。


推荐阅读