c中的memcpy函数

Nik*_*hil 1 c linux

为什么以下代码会出现分段错误?

int main()
{
        char *t = "Working on RedHat Linux";
        char *s;

        s = malloc (8000 * sizeof(char));
        memcpy(s,t,7000);  
        printf("s = %s\nt = %s\n",s,t);
        free(s);
}
Run Code Online (Sandbox Code Playgroud)

我为's'分配了8000bytes.并且仅将't'复制到s直到7000字节.虽然我为's'分配了8000个字节,为什么它会给出分段错误?

EFr*_*aim 11

分段错误是因为t指向小于7000字节的区域.当没有映射可读页面时(在字符串文字结束之后),您可能正在尝试读入某个区域"Working on RedHat Linux".您应该将memcpy限制为sizeof("Working on RedHat Linux")字节.