首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缓冲区复制过程中的故障分割错误

缓冲区复制过程中的故障分割错误
EN

Stack Overflow用户
提问于 2014-01-02 23:03:09
回答 2查看 55关注 0票数 1

我写代码:

代码语言:javascript
运行
复制
#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错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-02 23:04:49

strncpy总是在缓冲区的末尾填充,所以这一行:

代码语言:javascript
运行
复制
 strncpy(var, "abcdefghi",1000000 );

导致了分段故障。

由于您可以读取here,缓冲区的其余部分都填充了\0

票数 4
EN

Stack Overflow用户

发布于 2014-01-02 23:06:24

因为您分配了10个字节:

代码语言:javascript
运行
复制
char * var=(char*) calloc(/*HERE->*/10, sizeof(char));

并尝试将1000000字节复制到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20893568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档