我写代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char * var=(char*) calloc(10, sizeof(char));
strncpy(var,"123456789",9);
strncpy(var, "abcdefghi",1000000 );
printf("This is var == %s\n",var);
}但是在编译和运行他之后,我出现了Segmentation fault错误。如果我将行strncpy(var, "abcdefghi",1000000)中的最大复制字符更改为10,那么它可以正常工作。但我真的不明白为什么在我的情况下会发生segmentation fault错误。
发布于 2014-01-02 23:04:49
strncpy总是在缓冲区的末尾填充,所以这一行:
strncpy(var, "abcdefghi",1000000 );导致了分段故障。
由于您可以读取here,缓冲区的其余部分都填充了\0。
发布于 2014-01-02 23:06:24
因为您分配了10个字节:
char * var=(char*) calloc(/*HERE->*/10, sizeof(char));并尝试将1000000字节复制到它。
https://stackoverflow.com/questions/20893568
复制相似问题