我正在尝试更改此结构的'lineNumber'字段:
typedef struct occurrenceType Occurrence;
struct occurrenceType {
char* line;
int lineNumber;
int wordNumber;
Occurrence *next;
};
使用这段代码
Occurrence *occur;
occur=(Occurrence*)malloc(sizeof(Occurrence));
(*occur).lineNumber=34;
但是当我打印(*出现).lineNumber时它变为零。我已经尝试了几种不同的结构和结构和发生的指针,但似乎没有任何工作。谁能看到我做错了什么?谢谢!
编辑: 完整的通话看起来像这样:
inFile=fopen(argv[1],"r");
while(fgets(line,100,inFile)!=NULL) {
if(strstr(line,argv[2])!='\0') {
(*occur).line=line;
(*occur).lineNumber=34;
(*occur).next=(Occurrence*)malloc(sizeof(Occurrence));
occur=(*occur).next;
printf("%d",(*occur).lineNumber);
}
count++;
}
它逐行读取文件并搜索命令行中提供的键,然后为每次出现的链接列表添加一个结构。
答案 0 :(得分:1)
您正在打印新malloc结构的字段。尝试倒转最后两行:
occur=(*occur).next;
printf("%d",(*occur).lineNumber);
为:
printf("%d",(*occur).lineNumber);
occur=(*occur).next;
根据您提供给我们的代码段的上下文,结合其他评论:您应该将该结构设置为零,因为malloc
不会为您执行此操作。它会有垃圾,我假设你正在检查next
的字段NULL
,因为你正沿着链表走。将您的通话更改为calloc()
可以解决此问题。
其次,为什么要将行指针分配给字段line
?对于每个结构来说都是一样的,它的内容将是从文件中读取的最后一个结构。我假设你想要保存读取线。尝试将其设为另一个缓冲区(或calloc()
),并将strcpy()
找到的数据添加到其中。