无法使用指向结构的指针更改结构字段

时间:2013-12-07 06:16:43

标签: c

我正在尝试更改此结构的'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++;
}

它逐行读取文件并搜索命令行中提供的键,然后为每次出现的链接列表添加一个结构。

1 个答案:

答案 0 :(得分:1)

您正在打印新malloc结构的字段。尝试倒转最后两行:

    occur=(*occur).next;
    printf("%d",(*occur).lineNumber);

为:

    printf("%d",(*occur).lineNumber);
    occur=(*occur).next;

根据您提供给我们的代码段的上下文,结合其他评论:您应该将该结构设置为零,因为malloc不会为您执行此操作。它会有垃圾,我假设你正在检查next的字段NULL,因为你正沿着链表走。将您的通话更改为calloc()可以解决此问题。

其次,为什么要将行指针分配给字段line?对于每个结构来说都是一样的,它的内容将是从文件中读取的最后一个结构。我假设你想要保存读取线。尝试将其设为另一个缓冲区(或calloc()),并将strcpy()找到的数据添加到其中。