0

这个程序简单地获取一个带有 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 * restrict ' 但参数的类型为 'char **'</p>

我的主要程序:

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;
}
4

2 回答 2

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。

于 2013-10-02T07:13:22.267 回答
0

如果没有对任何东西进行类型定义,C 中的结构类型名称必须以 struct 关键字开头。所以而不是

Node *ptr;

利用

struct Node *ptr;

您的 strcpy 函数似乎未声明。为此:#include <string.h>

于 2013-10-02T07:13:56.690 回答