1

我对 C 相当陌生,我正试图围绕多维字符数组的初始化来思考,对于我的任务,我被要求从文件中读取并将文本存储在数组中,

我必须读取 5 个虚构人物的输入并存储一些关于他们的信息,所以我意识到我的数组看起来像:

char input[5][];

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

char input[5][9];

或者

char input[5][256];

另外,如果是后者,是否有一种做法是我应该将其设置为多大,或者只是选择一个数字?谢谢!

4

2 回答 2

4

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

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

或者,如果您愿意,您可以制作这些 char 指针(例如char *name, char *address),然后您可以malloc()根据需要为每个变量分配所需的内存量(另外,使用后不要忘记free内存)。

然后,在您的主体中,您可以制作一组人,例如struct person[5];,并根据需要操纵他们。

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

于 2013-10-01T01:24:35.843 回答
1

要弄清楚这一点,您应该尝试了解输入。如果您绝对确定 5 个人只有 9 个字段(单字符数据),那么您应该将其设置为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];
   ...
};
于 2013-10-01T01:29:20.217 回答