C strcpy导致分段错误

时间:2013-12-07 06:53:24

标签: c++ c

我有这个结构:

typedef struct occurrenceType Occurrence;

struct occurrenceType {
char* line;
int lineNumber;
int wordNumber;
Occurrence *next;

};

我正在尝试创建一个这样的链表:

inFile=fopen(argv[1],"r");
while(fgets(line,100,inFile)!=NULL) {
    if(strstr(line,argv[2])!='\0') {
            strcpy((*occur).line,line);
                (*occur).lineNumber=count;
                (*occur).next=(Occurrence*)malloc(sizeof(Occurrence));
                occur=(*occur).next;
        lineCount++;
    }
    count++;
}

程序应该读取程序的行并搜索命令行中指定的字符串。找到匹配项后,会在链接列表中添加一个匹配项。除结构的“line”字段外,一切正常。当使用strcpy填充它时,会发生分段错误,但

(*occur).line=line;

不是一个可行的选项,因为整个程序中的行指针会发生变化。任何人都可以提出另一种方法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您需要为行字段分配空间或使其成为实际的字符缓冲区。

如果您要分配,请在块中的strcpy上方添加此行:

    occur->line = calloc( 1, 100 );