C多维字符数组初始化
我是C语言的新手,我正试着把注意力集中在多维字符数组的初始化上,对于我的任务,我被要求从文件中读取文本并将其存储在数组中 我必须读取5个虚构人物的输入并存储他们的一些信息,因此我意识到我的数组将类似于:C多维字符数组初始化,c,multidimensional-array,C,Multidimensional Array,我是C语言的新手,我正试着把注意力集中在多维字符数组的初始化上,对于我的任务,我被要求从文件中读取文本并将其存储在数组中 我必须读取5个虚构人物的输入并存储他们的一些信息,因此我意识到我的数组将类似于: char input[5][]; 我所困惑的是第二个参数,我也不确定该设置什么。关于这些人,我将存储9个字段的信息,我似乎找不到答案,我是否应该将第二个数字设置为字段的数量,或者它应该有多大。即 char input[5][9]; 或 另外,如果是后者,是否有一种做法,我应该将其设置为多大,
char input[5][];
我所困惑的是第二个参数,我也不确定该设置什么。关于这些人,我将存储9个字段的信息,我似乎找不到答案,我是否应该将第二个数字设置为字段的数量,或者它应该有多大。即
char input[5][9];
或
另外,如果是后者,是否有一种做法,我应该将其设置为多大,或者只选择一个数字?谢谢 我建议您采取以下方法:不要创建一个
char
数组来存储这些人的信息,而应该创建一个struct
person,其中包含一些具有预定义长度的信息变量
struct person {
char name[50];
char address[50];
char phone_number[15];
};
或者,如果您愿意,您可以创建这些字符指针(例如char*name
,char*address
),然后您可以根据需要为每个变量分配所需的内存量(另外,使用后不要忘了分配内存)
然后,在main中,您可以创建一个person数组,例如struct person[5]编码>,并根据需要对其进行操作
编辑:还要注意,正如Pankrates所评论的,当您为数组定义大小时,必须确保输入不会超过数组的长度,否则您将在内存中写入不属于您的内容,这就导致了。我建议您采取以下方法:不要用char
数组来存储这些人的信息,而应该创建一个struct
person,它将具有一些预定义长度的信息变量
struct person {
char name[50];
char address[50];
char phone_number[15];
};
或者,如果您愿意,您可以创建这些字符指针(例如char*name
,char*address
),然后您可以根据需要为每个变量分配所需的内存量(另外,使用后不要忘了分配内存)
然后,在main中,您可以创建一个person数组,例如struct person[5]编码>,并根据需要对其进行操作
编辑:还要注意,正如Pankrates所评论的,当您为数组定义一个大小时,您必须确保输入不会超过数组的长度,否则您将在内存中写入不属于您的内容,这将导致。要理解这一点,您应该尝试了解输入。如果您完全确定5个人只有9个字段(单字符数据),那么您应该将其设置为char input[5][9]
如果您认为将来可能会有比9更多的信息字段,那么可以选择更高的值,如char input[5][256]
。但是,如果字段的数据稀疏,这将浪费大量空间。这是内存的静态分配
因此,当您不确定每个人的字段数量时,第三种选择是动态分配内存,如--
在最后一种情况中,内存是在运行时而不是编译时提供的。您还可以从用户输入中获取大小,并将其用于为字段分配内存
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];
...
};
要了解这一点,您应该尝试了解输入。如果您完全确定5个人只有9个字段(单字符数据),那么您应该将其设置为char input[5][9]
如果您认为将来可能会有比9更多的信息字段,那么可以选择更高的值,如char input[5][256]
。但是,如果字段的数据稀疏,这将浪费大量空间。这是内存的静态分配
因此,当您不确定每个人的字段数量时,第三种选择是动态分配内存,如--
在最后一种情况中,内存是在运行时而不是编译时提供的。您还可以从用户输入中获取大小,并将其用于为字段分配内存
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];
...
};
请注意,使用这些方法时,您应该始终确保用户输入将适合分配的内存,即在第一种情况下,在person.name
中输入超过49个字符的名称将导致未定义behaviour@Pankrates很好,谢谢。我忘了将其添加到我的答案中。请注意,使用这些方法,您应该始终确保用户输入将适合分配的内存,即在第一种情况下,在person中输入名称。超过49个字符的名称将导致未定义behaviour@Pankrates很好,谢谢。我忘了把它加到我的答案里。