【发布时间】:2013-10-02 07:46:46
【问题描述】:
这个程序简单地获取一个带有 ASCII 行的文件,将它放入一个链表堆栈,然后以相同的 ASCII 格式将反向列表打印到一个新文件中。
我的结构代码:
typedef struct Node{
char info[15];
struct Node *ptr;
};
我在 Main 上收到以下错误。大多数人都必须在我声明新节点头的地方做......该语法有什么问题?:
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 **’
主代码:
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;
}
【问题讨论】:
-
char *info[15]在你的脑海中应该做什么?您能否先尝试验证您对 C 如何在小程序上工作的假设,然后在您确定 C 如何工作后才转向更复杂的程序? -
这是一个字符数组,包含文件中的一行。
-
但事实并非如此。它是一个指针数组。事实上,你的编译器应该已经给你一个警告。您确定已启用所有警告吗?
-
或者,当我添加它时。再次,当我声明一个新的头节点时,问题似乎出现了。来自Java,我想我看不出问题出在哪里。
-
gcc -o strrev strrev.c -Wall -m32 -O --> 所以是的