【问题标题】:Error working with structs and pointer arrays: incompatible types in assignment使用结构和指针数组时出错:赋值中的类型不兼容
【发布时间】:2010-02-02 12:36:47
【问题描述】:
#define STRMAX 50

struct Person {
    char sName[STRMAX];
    int iAge;
};
typedef struct Person PERSON;

int main() {
    PERSON *personen[1];
    personen[0]->sName = "Pieter";
    personen[0]->iAge = 18;

    return 0;
}

此代码在personen[0]->sName = "Pieter"; 上生成错误,说分配中的类型不兼容。为什么?

【问题讨论】:

    标签: c pointers arrays struct


    【解决方案1】:

    你不想要一个指针数组。试试
    PERSON personen[1];

    正如其他人所说,使用 strcpy 函数!

    【讨论】:

      【解决方案2】:

      不要尝试分配数组。使用strcpy 将字符串从一个数组复制到另一个数组。

      ...sName 是一个字符数组,而“Pieter”是一个 const char*。您不能将后者分配给前者。编译器永远是对的:)

      【讨论】:

        【解决方案3】:

        改变

        PERSON *personen[1];
        

        PERSON personen[1];
        

        并使用 strcpy 复制字符串。

        strcpy(personen[0]->sName,"Pieter");
        

        【讨论】:

          【解决方案4】:

          我同意上述观点,但我认为包括“为什么”也很重要

          int a;      // is an integer
          int *b;     // pointer to an integer must be malloced (to have an array)
          int c[];    // pointer to an integer must also be malloced (to have an array)
          int d[5];   // pointer to an integer bu now it is initialized to an array of integers
          

          从简单的指针中获取 b 和 c 并给他们内存以匹配 d 使用以下给他们内存空间

          b = (int *) malloc(sizeof(int)*5);
          

          它将 malloc 返回的指针转换为 int 指针,并创建一个 5 倍于整数大小的内存块(因此它将像 d 一样保存 5 个整数)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-21
            • 2017-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-07
            • 2019-08-09
            相关资源
            最近更新 更多