【问题标题】:Struct function doesn't work with my array结构函数不适用于我的数组
【发布时间】:2014-01-09 11:44:53
【问题描述】:

所以我基本上有一个带有名称的结构,它必须是动态的,以及一个 ID。我认为它可以是这样的。

typedef struct {
char *name;
unsigned int id;
} person;

现在我将使用给定的 start 编写一个函数:

person *readData();

结构和名称都必须是动态的,我想用 malloc 函数来做到这一点。对于所有人,也应该有一个数组,我们将其命名为“people[1000]”。

这是我对 main 函数的上述功能的尝试:

int count = 0;

person *readData() {
    int i, len;
    char puffer[1000];

    printf("Name: ");
    scanf_s("%999s", &puffer);

    len = strlen(puffer);
    people[count].name = (char *)malloc((len + 1)*sizeof(char));

    for (i = 0; i < len; i++)
        people[count].name[i] = puffer[i];

    people[count].name[len] = '\0';
}

void main(void)
{
    person *people[1000];
    readData();
    printf("\n%s\n", people[count].name);
}

嗯,它似乎不是那样工作的。 Visual Studio 在函数中说,“人”必须是联合或结构类型。 有什么快速输入吗?这只是基本的 C,因为我刚刚开始学习它。

编辑:完整代码:

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

typedef struct {
char *name;
unsigned int id;

} person;

person people[1000];

int count = 0;

person *readData() {
int i, len;
char puffer[1000];
printf("Name: ");
scanf_s("%999s", &puffer);
len = strlen(puffer);
people[count].name = (char *)malloc((len + 1)*sizeof(char));
for (i = 0; i < len; i++)
    people[count].name[i] = puffer[i];
people[count].name[len] = '\0';


}

void main(void){
readData();
printf("\n%s\n", people[count].name);

}

【问题讨论】:

  • 您的指针数组 (people) 对于 main() 函数是本地的,因此如果您不传递它(或使其成为全局),readData() 就不可能知道它。您可能不是指person *readData(),而是void readData(person* people)。不过,您的代码也包含许多其他问题。

标签: c


【解决方案1】:

people 变量在 readData 函数的主体中未定义。 这就是编译器因错误而失败的原因。

  1. 您可以将变量传递给函数person *readData(person *people)。 不要忘记在main 函数中将readData(); 更改为readData(people);

  2. 如果您只需要一维数组,请勿将指针表示法与数组表示法混合使用。 使用person people[1000]; 而不是person *people[1000];

【讨论】:

  • 感谢您的快速回复。因为我得到了这个没有任何参数的函数,而我得到了其他的>with
  • 如果你真的想这样做,只需在 main 函数体之外声明你的变量。
  • 即使有一个参数,我仍然会在我想说“people[count].name”的结构函数中得到错误。关于计数的错误表明它必须是指向对象的类型。您对此也有想法吗?
  • 你考虑过我的第二个建议吗?
  • 是的,我也应用了。
【解决方案2】:

您的函数 readData 不知道您的人员数组。如果你按照这些思路重写它:

void readData(person** people) {
    your code
}

void main() {
   person* people[100];
   readData(people);
}

应该会更好。

请参阅 zavgs 回答以了解更多需要改进的地方。

【讨论】:

  • 没有参数的任何方法?
  • @user3177280 没那么容易。但是参数有什么问题呢?
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2016-01-13
  • 2017-12-11
  • 2011-06-05
  • 1970-01-01
  • 2016-06-16
相关资源
最近更新 更多