簡體   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