【发布时间】:2013-12-07 06:53:23
【问题描述】:
我有这个结构:
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++;
}
该程序应该读取程序的行并搜索在命令行中指定的字符串。找到匹配项时,将出现一个事件添加到链接列表中。除了结构的“行”字段外,一切正常。使用strcpy填充时,会出现分段错误,但是
(*occur).line=line;
不是一个可行的选择,因为行指针在整个程序中都会发生变化。谁能建议另一种方法来做到这一点?谢谢!
【问题讨论】:
-
写入前需要先分配
line -
@amdixon 我将如何正确地做到这一点?我之前试过了,没用。
-
顺便说一句,
occur->lineNumber和occur->next是通过指针写入字段引用的更常见方式,而不是(*occur).lineNumber和(*occur).next。 -
另外,由于您使用
malloc(),您的最后一个列表元素不会被初始化为任何有意义的状态。您可能希望显式初始化occur->next = NULL以及occur = (*occur).next;行之后的其他字段。