繁体   English   中英

C多维字符数组初始化

[英]C Multidimensional Character Array Initialization

我是C语言的新手,我想围绕多维字符数组的初始化工作,要求我从文件中读取文本并将文本存储在数组中,

我必须阅读5个虚拟人员的输入并存储有关他们的一些信息,因此我意识到我的数组将类似于:

char input[5][];

我很困惑的是第二个参数,我不确定该设置什么。 我将存储9个有关这些人的信息字段,我似乎找不到答案是否应该将第二个数字设置为字段数或字段的大小。

char input[5][9];

要么

char input[5][256];

另外,如果是后者,是否有实践将其设置为更大的值,或者只是选择一个数字? 谢谢!

我建议您采用以下方法:而不是创建一个char数组来存储有关这些人员的信息,您应该创建一个struct person,该人员将具有一些带有预定义长度的info变量

struct person {
    char name[50];
    char address[50];
    char phone_number[15];
};

或者,如果需要,可以创建这些char指针(例如char *namechar *address ),然后可以根据需要为每个变量malloc()所需的内存量(也请不要忘记使用后free内存)。

然后,在您的主体中,您可以创建一系列人,例如struct person[5]; ,并根据需要对其进行操作。

编辑:还请注意,正如Pankrates所评论的那样,当您为数组定义大小时,必须确保输入内容不会超出数组的长度,否则您将在不属于您的内存中写入内容,这会导致不确定的行为

为了弄清楚这一点,您应该尝试了解输入。 如果您完全确定5个人只有9个字段(单个char数据),则应将其设置为char input[5][9]

如果您认为将来的信息字段可能比9多,那么您可以使用诸如char input[5][256]这样的更高值。 但是,如果字段的数据稀疏,则会浪费大量空间。 这是内存的静态分配

因此,当您不确定每个人的字段数时,第三个选择是动态分配内存,例如-

char* input[5];
input[0] = malloc(sizeof(char) * 100); // space of 100 chars

在最后一种情况下,内存是在运行时提供的,而不是在编译时提供的。 您还可以从用户输入中获取大小,并将其用于为字段分配内存。

char* input[5];
int size = 0;
scanf("%d",&size);
input[0] = malloc(sizeof(char) * size);

此外,如果您需要存储字段(每个字段使用多个字符),则应创建一个结构。

struct person
{  char name[30];   // memory could be assigned dynamically or statically
   char field1[30];
   char field2[30];
   ...
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM