首页 > 解决方案 > 为什么 strcpy 不会在这里失败?商榷

问题描述

为什么我没有收到分段错误之类的?

#include <string.h>
#include <stdio.h>

int main(void)
{
    char msg[5];
    strcpy(msg, "dsasgagasagfggdag");

}

标签: c

解决方案


当你在 C 中分配一块内存时,它通常会尝试返回一个连续地址块,例如,对于 msg[5],假设一个字节的第一个地址是 42,那么下一个地址将是43,下一个,44,然后是 45 和 46。因此,按照这个想法,如果地址 47 是空闲的(如果它没有被另一个变量分配),它将存储字符串的下一个字节(对于“dsasgagasagfggdag”,它会存储字符'a')。

因此,这种行为只是由于因果关系而发生的。正确的方法是使用具有确切数量的字符的函数'malloc',这样你就可以确定你所有的字符都存储在正确的地址中。


推荐阅读