我正在为我的 CS1 课程做一个项目,我遇到了我以前从未想过的事情。我知道 C 中的所有数组本质上都是指向数组第一个元素的指针,而字符串实际上只是一个字符数组。但是,对于我的任务,我们必须读入一个文件,该文件的一部分如下:
Brad Tim Rick(更多人名用空格分隔) 露西·安吉拉·蒂娜(更多女性名字以空格分隔)
这是一个简短的示例,但我要做的是提取名称并将它们存储到两个单独的数组中,一个用于男性,一个用于女性。
我从来没有用过这样的东西,所以我当然很困惑。这就是我想要做的,当然它不工作......哦,是的,我正在尝试将它们存储在动态分配中。唯一的规范说名称永远不会超过 19 个字符(我应该说 20 以允许字符串末尾的 '/0' 无论如何仍然存在吗?)我如何告诉编译器,“嘿,我想要一个字符串数组,每个字符串可以容纳 19 个字符 + 1 用于“字符串预告片'/0'”?然后我如何通过指针访问它们?
char **mens_names, **womens_names;
mens_names = malloc(number_of_couples * sizeof(char[19]));
womens_names = malloc(number_of_couples * sizeof(char[19]));
if(mens_names == NULL){
printf("Malloc failed! Memory could not be allocated to variable mens_names.");
return -1;
}
int i;
for(i = 0; i < number_of_couples; i++){
fscanf(input_file, "%s", &mens_names[i]);
}
if(womens_names == NULL){
printf("Malloc failed! Memory could not be allocated to variable womens_names.");
return -1;
}
for(i = 0; i < number_of_couples; i++){
fscanf(input_file, "%s", &womens_names[i]);
}
for(i = 0; i < number_of_couples; i++){
printf("Man: %s ", mens_names[i]);
printf("Woman: %s\n", womens_names[i]);
}