为什么我在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);
}
}
}
答案 0 :(得分:2)
tok==NULL
循环中对while
的{{1}}检查是在1>之后发送,而不是之前。您正在尝试复制NULL指针。
每当你遇到分段错误时,首先要寻找的是NULL指针的可能性。
答案 1 :(得分:2)
在此代码中:
while(tok!=NULL)
{
tok=strtok(NULL,"^");
strcpy(o[k].objcode,tok);
}
您在进入循环之前检查tok
的有效性,但在strtok()
更改之后没有。
调试器应该能够确切地确定哪个代码行存在问题,并且在调试器中,您可以看到tok
的值是否正常strcpy()
调用。
答案 2 :(得分:0)
strcpy在数组大小方面不安全,请改用strncpy !!
即。如果您在输入中获得更多数据,则会溢出您的声明[i]。