6

我知道这是一个非常基本的问题,但是没有它我就无法继续前进,而且在其他地方也没有清楚地解释。

为什么这个编程给了我这么多未声明标识符的错误?不过,我已经宣布了。

这些是我得到的错误。

Error   2   error C2143: syntax error : missing ';' before 'type'
Error   3   error C2065: 'ptr' : undeclared identifier
Error   4   error C2065: 'contactInfo' : undeclared identifier
Error   5   error C2059: syntax error : ')'
Error   15  error C2223: left of '->number' must point to struct/union

和更多...

#include<stdio.h>
#include<stdlib.h>

typedef struct contactInfo
{
    int number;
    char id;
}ContactInfo;


void main()
{

    char ch;
    printf("Do you want to dynamically etc");
    scanf("%c",&ch);
    fflush(stdin);


        struct contactInfo nom,*ptr;
        ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

    nom.id='c';
    nom.number=12;
    ptr->id=nom.id;
    ptr->number=nom.number;
    printf("Number -> %d\n ID -> %c\n",ptr->number,ptr->id);

}
4

5 回答 5

5
typedef struct contactInfo
{
    int number;
    char id;
}ContactInfo;

这段代码定义了两件事:

  1. 一种名为_ContactInfo
  2. 一个struct名为contactInfo

注意和的c区别C

在您的代码中,您使用的是两者的混合组合,这是允许的(尽管恕我直言令人困惑)。

如果您使用struct变体,则需要显式使用struct contactInfo. 对于其他变体 ( ContactInfo),您必须省略该struct部分,因为它是类型定义的一部分。

所以要小心你的结构的不同定义。最好只使用其中一种变体。


我手头没有 Visual Studio,但以下(更正的)代码可以使用 gcc 正确编译而没有任何警告:

#include<stdlib.h>

typedef struct contactInfo
{
    int number;
    char id;
}ContactInfo;


void main()
{
    ContactInfo nom,*ptr;
    ptr=malloc(2*sizeof(ContactInfo));    
}

(我省略了代码中不太有趣/未修改的部分)

于 2013-01-23T09:12:30.863 回答
3

这:

ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

错了,没有类型叫做contactInfo.

有一个struct contactInfo, 即typedef:d as ContactInfo。C 是区分大小写的(并且您必须包括struct它在 C++ 中的工作方式不同)。

另请注意,引用的行最好写为:

ptr = malloc(2 * sizeof *ptr);

由于在 C中强制转换的返回值malloc()是一个坏主意,因此我删除了强制转换。此外,重复类型是一个坏主意,因为它会增加引入错误的风险,所以我也删除了它。

请注意,这sizeof *ptr意味着“ptr指向的类型的大小”并且是一件非常方便的事情。

于 2013-01-23T09:04:20.930 回答
0

代替

ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

ptr=malloc(2*sizeof(struct contactInfo));
于 2013-01-23T09:06:07.710 回答
0

C 是区分大小写的语言。

ptr=(contactInfo)malloc(2*sizeof(contactInfo));

应该是:

ptr=malloc(2*sizeof(ContactInfo));

于 2013-01-23T09:06:43.803 回答
-1
struct contactInfo nom,*ptr;
ptr=(contactInfo*)malloc(2*sizeof(contactInfo));

在这里,您正在使用contactInfo 进行类型转换,因为它应该是struct contactInfo。并且当您将其 typedef 到 ContactInfo 中时,您也可以使用它。

    struct contactInfo nom,*ptr;
    ptr=(ContactInfo*)malloc(2*sizeof(ContactInfo));
于 2013-01-23T09:08:20.963 回答