arrays - 为什么连接和复制大于数组大小的字符串没有错误?
问题描述
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
}
请注意,做大strcpy
到static char[5]
不显示overflow error
或segementation fault
现在!为什么?
如果我为return
in 函数分配字符串的方法是理想的/好的,请公开评论。
解决方案
区别在于您看到的编译时检查和 C 没有的运行时检查。
我建议你再考虑一下你想要做什么,关注保存字符串所需的内存以及它来自哪里。如果不涉及线程,事情就更简单了,但是如果你的例程被调用两次,你的例程当前就会出现问题。
推荐阅读
- docker - 如何从 Docker 为 jenkins 生成 API 令牌
- javascript - setSinkId 仅适用于
- python - 气流:无法访问 AWS 提供商
- npm - 为什么我在执行 npm install 时会看到这个
- java - 如何删除具有相同对象名称的 JavaFx 标签
- nestjs - 是否可以在 TypeORM 的 leftJoinAndSelect 中使用子查询
- java - 需要正则表达式来删除多个换行符之间的空格
- javascript - 如何修复“TypeError:无法读取未定义的属性 'toString'” | 不和谐.js
- spring - Spring中确保@OneToOne关系的方法是什么?
- c# - 无法将面向 .NET Framework 4.7.2 的 Web API Core 2.1 托管到 IIS