[英]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.