首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >下面的函数给出了strncpy上的分割错误,谁能解释一下为什么会发生这种分割错误?

下面的函数给出了strncpy上的分割错误,谁能解释一下为什么会发生这种分割错误?
EN

Stack Overflow用户
提问于 2018-05-29 18:24:18
回答 1查看 63关注 0票数 0
代码语言:javascript
复制
IFNAMSIZ = 16

static STATUS_CODE __bind(int sock_fd, const char *interface)
    {

            struct sockaddr sock_addr;
            memset(&sock_addr, '\0', sizeof(sock_addr));
            strncpy(sock_addr.sa_data, interface, IFNAMSIZ);
            sock_addr.sa_family = AF_PACKET;

            if (bind(sock_fd, &sock_addr, sizeof(struct sockaddr)) < 0) {
                    EPRINT("bind failed: %s", strerror(errno));
                    return FAILURE;
            }
        return SUCCESS;
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-30 10:13:31

有人能解释一下为什么会发生这种分段错误吗

在Linux上,您的代码可能会出现堆栈缓冲区溢出:

代码语言:javascript
复制
strncpy(sock_addr.sa_data, interface, IFNAMSIZ);

假设是IFNAMSIZ = 16,因为sizeof(sa_data) == 14。然而,这不太可能在strncpy中导致SIGSEGV --堆栈上还有很多其他数据。

更有可能导致崩溃的原因是您传入的interfaceNULL。通过使用调试信息(通常是-g标志)编译您的程序,并在调试器下运行它,这应该是显而易见的。

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

https://stackoverflow.com/questions/50582009

复制
相关文章

相似问题

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