Reputation: 223
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
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
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