【问题标题】:Assigning a character array to a character array in a structure将字符数组分配给结构中的字符数组
【发布时间】:2013-11-20 17:21:31
【问题描述】:

我正在做一个项目,该项目需要我创建一个特定结构类型的数组。结构如下:

typedef struct
{
char array[30];
int num;
}structure

我已经声明了一个这样的结构数组:

structure struct1[5];

我将此结构数组传递给一个函数,该函数用一个字符串和一个数字填充前四个元素。第五个留空。稍后在程序中,我再次传递数组并尝试使用gets() 将结构中的字符串设置为用户确定的字符串。我收到此错误:

438:19: error: incompatible types when assigning to type 'char[30]' from type 'char *'

如果我需要提供更多说明,请告诉我。

谢谢!

编辑:这是我正在做的事情:

typedef struct
{
char array[30];
int num;
}structure;

void fillStructs(structure[]);
void userEditStructs(structure[]);

main()
{
structure myStructs[5];
fillStructs(myStructs);
userEditStructs(myStructs);
return 0;
}

void fillStructs(structure s[])
{
    //code to fill myStructs elements 0-3.
}

void userEditStructs(structure s[])
{
char newArr[30];
int newNum;
printf("Please enter your string:\n\nEntry:\t");
gets(newArr);
printf("Please enter your number:\n\nEntry:\t");
scanf("%i", newNum);
s[5].array = newArr;
s[5].num = newNum;
}

【问题讨论】:

  • 请在将结构数组传递给函数的位置添加代码。
  • 使用 strcpy 而不是运算符 =
  • 永远不要使用gets()。它很危险,已被弃用,已从 C++ 中删除,也应该从 C 中删除。

标签: c arrays structure


【解决方案1】:

你正在做这样的事情

char a[20];
a = "bla";

你不能这样做。

改为使用strcpy(a,"bla");。 (#include <string.h>)

【讨论】:

    【解决方案2】:

    如果不查看代码,您可能正在尝试执行以下操作:

    struct[4].array = gets(<unknown>);
    

    这是行不通的,因为您不能像编译器所说的那样,将 gets 返回的 char* 分配给数组。您还使用了gets,强烈建议不要使用它,因为它不执行边界检查。相反,请执行以下操作:

    fgets(struct[4].array, sizeof(struct[4].array), stdin);
    

    这将进行适当的边界检查。

    【讨论】:

      猜你喜欢
      • 2017-06-12
      • 2021-03-19
      • 2010-10-09
      • 1970-01-01
      • 2021-12-07
      • 2015-09-25
      • 2014-02-10
      • 1970-01-01
      相关资源
      最近更新 更多