c - 为什么 strcpy 不会在这里失败?商榷
问题描述
为什么我没有收到分段错误之类的?
#include <string.h>
#include <stdio.h>
int main(void)
{
char msg[5];
strcpy(msg, "dsasgagasagfggdag");
}
解决方案
当你在 C 中分配一块内存时,它通常会尝试返回一个连续地址块,例如,对于 msg[5],假设一个字节的第一个地址是 42,那么下一个地址将是43,下一个,44,然后是 45 和 46。因此,按照这个想法,如果地址 47 是空闲的(如果它没有被另一个变量分配),它将存储字符串的下一个字节(对于“dsasgagasagfggdag”,它会存储字符'a')。
因此,这种行为只是由于因果关系而发生的。正确的方法是使用具有确切数量的字符的函数'malloc',这样你就可以确定你所有的字符都存储在正确的地址中。
推荐阅读
- ubuntu - 编写系统调用返回进程的pid
- postgresql - Postgres 在 jsonb 数组中搜索以排除行
- dart - 如何在 Dart 编程中使用 >>>"
- c++ - C++ 中的 Timsort 实现不能处理 10,000 个数字
- php - 如何设置设置 IIS、MS SQL 服务器以显示我的 PHP 错误
- python-2.7 - 如何安装 etsproxy 包?
- html - Unity Web GL html容器:如何根据浏览器宽度“拉伸”宽度窗口?
- java - OracleConnection 不推荐使用的方法问题
- codenameone - 为什么我从不在本机界面中输入特定的回调函数?
- android - PageTransformer 在 Android 中禁用滚动