繁体   English   中英

由于strcpy()造成的分段错误

[英]segmentation fault due to strcpy()

为什么我在strcpy()中遇到分段错误?

该程序被编译没有任何问题,但由于strcpy我遇到了分段错误,请为我提供解决方法。

struct obj
{
    char objcode[100];
}o[10];

int main()
{
    char buffer[500],statement[50][50];/*storing each statement*/
    int i=0,fd;
    int j=0,k=0;
    char *tok;
    fd=open("objectprogram.txt",O_RDONLY);
    const ssize_t r=read(fd,buffer,500);
    buffer[r]='\0';
    char *sta;
    sta=strtok(buffer,"\n");
    while(sta!=NULL)
    {
        strcpy(statement[i],sta);
        i++;
        sta=strtok(NULL,"\n");
    }   
    for(j=1;j<i-1;j++)
    {
        tok=strtok(statement[j],"^");
        tok=strtok(NULL,"^"); 
        tok=strtok(NULL,"^");
        while(tok!=NULL)
        {
            tok=strtok(NULL,"^");
            strcpy(o[k].objcode,tok);
        }

    }
}

while循环中对tok==NULL检查发生strcpy的调用之后 ,而不是在调用之后。 您正在尝试复制NULL指针。

每当遇到分段错误时,首先要寻找的是NULL指针的可能性。

在此代码中:

                    while(tok!=NULL)
                    {
                        tok=strtok(NULL,"^");
                        strcpy(o[k].objcode,tok);
                    }

您可以在进入循环之前检查tok的有效性,但是在strtok()更改它之后不进行检查。

调试器应该能够准确地识别出哪一行代码有问题,并且从调试器内部您可以看到在strcpy()tok的值是否正确。

就数组大小而言,strcpy是不安全的,请改用strncpy !!

即,如果您在输入中获得更多数据,则将溢出语句[i]。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM