katiea
katiea

Reputation: 223

Linked Lists & Pointer Syntax errors

This program simply takes a file with ASCII lines, puts it into a linked-list stack, and then prints the reversed list to a new file in the same ASCII format.

My struct Code:

typedef struct Node{
    char info[15];
    struct Node *ptr;
};

I'm getting the following errors on Main. Most have to do where I declare the new Node Head... what's wrong with that syntax?:

Errors
    strrev.c:28: error: ‘Node’ undeclared (first use in this function)
    strrev.c:28: error: (Each undeclared identifier is reported only once
    strrev.c:28: error: for each function it appears in.)
    strrev.c:28: error: ‘head’ undeclared (first use in this function)
    strrev.c:34: warning: passing argument 1 of ‘strcpy’ from incompatible pointer type
   /usr/include/string.h:128: note: expected ‘char * __restrict__’ but argument is of         type ‘char **’

Main Code:

int main(int argc, char *argv[])
{
    if (argc != 3) {
        fprintf(stderr, "usage: intrev <input file> <output file>\n");
        exit(1);
    }

    FILE *fp = fopen(argv[1], "r");
    assert(fp != NULL);


    Node *head = malloc(sizeof(Node));
    head->ptr=NULL;

    char str[15];
    while (fgets(str, 15, fp) != NULL){
        struct Node *currNode = malloc(sizeof(Node));
        strcpy(currNode->info, str);
        currNode->ptr = head;
        head=currNode;
    }

    char *outfile = argv[2];
    FILE *outfilestr = fopen(outfile, "w");
    assert(fp != NULL);

    while (head->ptr != NULL){
        fprintf(outfilestr, "%s\n", head->info);
        head = head->ptr;
    }

    fclose(fp);
    fclose(outfilestr);
    return 0;
}

Upvotes: 2

Views: 721

Answers (2)

Some programmer dude
Some programmer dude

Reputation: 409166

You have the wrong syntax for typedef of a structure. You need to place the typedef name after the structure definition:

typedef struct Node  /* <- structure name */
{
    /* ... */
} Node;  /* <- typedef name */

And it's okay to use the same name for both the structure and the type, as both live in different namespaces.

Upvotes: 5

Vorsprung
Vorsprung

Reputation: 34307

You need to have a Node typedef first

typedef struct Node Node;
typedef struct Node{
char *info[15];
Node *ptr;
};

Or do it in one

typedef struct Node{
    char *info[15];
    struct Node *ptr;
} Node;

Upvotes: 2

Related Questions