从“ char *”类型分配给“ char * [length]”类型时不兼容的类型(矩阵+结构)

时间:2019-04-26 12:00:29

标签: c

我正在做作业。我们必须使用新型struct制作矩阵。

#include<stdio.h>
typedef char* String;
typedef struct{
  String Name[10];
  String ID[6];
  float yo;
}data;

int main(){
  data user[3][3];
  // some code
  // wanna assign value
  user[0][0].Name="Charles";
  user[0][0].ID="123123";
  user[0][0].yo=20;
  // another code
}

当我尝试编译它时,它显示错误

  

从'char *'类型分配给'char * [10]'类型时出现[错误]不兼容的类型

如何解决?

3 个答案:

答案 0 :(得分:3)

我认为您的typedef不能帮助您理解问题。

typedef char* String;
String Name[10];

在这里您写了String Name[10],相当于char *Name[10],它是char上的指针数组。

user[0][0].Name="Charles";

此处您正在将值Charles(可以理解为char *)辅助为类型为char *[]的变量

此外,如果您想分配一个char *值(假设您解决了第一个问题),则可以使用strcpystrdup,例如(如果使用{{1 }}别忘了strcpy

希望您能理解

答案 1 :(得分:0)

@KillianG。已经回答,看来您可能已经通过定义和使用String类型为自己解决了这个问题。总的来说,定义伪装指针性质的类型往往比有害的有益。

我认为这里最深的问题是,您对数据结构的定义与您打算进行的定义不同。给定类型

typedef char* String;

您可以编写这样的代码...

String a_name = "Alice";

...但是您的结构不相似:

typedef struct{
  String Name[10];
  String ID[6];
  float yo;
}data;

您已将Name成员定义为String s 的数组,因此有十个指针,而您似乎想要的是{{1 }},适合存放一个C字符串:

char

或者,也许您希望typedef struct { char Name[10]; char ID[6]; float yo; } data; 是单个字符串,在这种情况下,您应该这样声明:

Name

在后一种情况下,没有必要或没有能力设置最大字符串长度,因为这样的事情不是 String Name; // equivalent to: char *Name; 的属性; C字符串的长度是字符数据的函数,而不是包含它们的数组的函数。

让我们假设您选择第一种选择,

char *

现在,您必须处理以下事实:C没有为整个数组复制提供运算符。特别是 char Name[10]; 运算符的左操作数不能是整个数组。取而代之的是,您可以逐个元素地填充数组,也可以通过具有这种效果的各种函数(=memcpy)填充数组。有一个专门针对复制字符串数据的功能的子家族:memmovestrcpy etc ..鉴于字符串(不是strncpyString仅需要8个字符(包括其终止符),将数据复制到现有"Charles"对象的data成员中的惯用方式是通过{{1 }}:

Name

答案 2 :(得分:-2)

您不能这样做,因为NAMEID是指向char的指针表

int main(){
  data user[3][3];
  // some code
  // wanna assign value
  user[0][0].Name[0]="Charles";
  user[0][0].ID[0]="123123";
  user[0][0].yo=20;
  // another code
}

typedef char* String;
typedef struct{
  String Name;
  String ID;
  float yo;
}data;

int main(){
  data user[3][3];
  // some code
  // wanna assign value
  user[0][0].Name="Charles";
  user[0][0].ID="123123";
  user[0][0].yo=20;
  // another code
}

typedef char* String;
typedef struct{
  char Name[10];
  char ID[7];
  float yo;
}data;

int main(){
  data user[3][3];
  // some code
  // wanna assign value
  strcpy(user[0][0].Name,"Charles");
  strcpy(user[0][0].ID,"123123");
  user[0][0].yo=20;
  // another code
}