该程序只需一个带有ASCII行的文件,将其放入链表列表中,然后将反转列表打印成相同ASCII格式的新文件。
我的结构代码:
typedef struct Node{
char *info[15];
struct Node *ptr;
};
我收到以下错误:
Errors:
strrev.c:14: warning: useless storage class specifier in empty declaration
strrev.c: In function ‘main’:
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:注意:预期'char * 限制'但参数类型为'char **'
我的主要计划:
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;
}
答案 0 :(得分:5)
在结构中引用结构的正确方法:
struct Node {
char info[15];
struct Node *ptr;
};
制作结构时,必须输出struct Node
才能使用它。如果你想避免你可以制作一个typedef
typedef struct Node {
char info[15];
struct Node *ptr;
} Node;
然后你可以在定义变量时使用Node
,比如
Node myNode;
(但最好避免对struct和typedef使用相同的名称以避免混淆)。
但是请注意,在引用自身时,仍需要在结构中编写struct Node
,因为此时尚未创建typedef。
答案 1 :(得分:0)
如果没有对任何内容进行typedef-ed,则C中的结构类型名称必须以struct关键字开头。而不是
Node *ptr;
使用
struct Node *ptr;
你的strcpy函数似乎未声明。仅此而已:#include <string.h
&gt;