c - c中带有char指针的二维数组
问题描述
在下面的代码中,我尝试为每个乐队获取乐队成员的数量。我已经尝试了很多东西,但没有任何效果。以下看起来应该但不是。
如果有人能指出我做错了什么,将不胜感激。
numMembers = sizeof(bands[0]) / sizeof(bands[0].members);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int i;
int j;
int numBands;
int numMembers;
int limit = 4;
struct band {
char name[10];
char *members[20];
};
const struct band bands[] =
{ {"Beatles", {"John", "George", "Paul", "Ringo", "Pete", "George"} },
{"Stones", {"Mick", "Keith", "Bill", "Charlie", "Brian"} },
{"Who", {"Pete", "Roger", "Keith", "John"} },
{"JHE", {"Jimmy", "Noel", "Mitch"} } };
numBands = sizeof(bands) / sizeof(bands[0]);
for ( i = 0; i < numBands; ++i ) {
printf ("%s\n", bands[i].name);
numMembers = sizeof(bands[0]) / sizeof(bands[0].members);
for ( j = 0; j < numMembers; ++j )
printf ("\t%s", bands[i].members[j]);
printf ("\n");
}
return 0;
}
解决方案
我做错了什么
numMembers
计算错误
numMembers
应该是数组中元素的数量。(20)
每个bands[i].member
都有 20 个给定的元素char *members[20]
。几个元素填充了指向字符串文字的指针。大多数元素保持为 0 ( NULL
)。
// numMembers = sizeof(bands[0]) / sizeof(bands[0].members);
numMembers = sizeof(bands[0].members) / sizeof(bands[0].members[0]);
尝试打印NULL
为字符串
printf ("\t%s", bands[i].members[j]);
bands[i].members[j]
什么时候无效NULL
。
并非所有bands[i].members[j]
都设置为非NULL
值。
numBands = sizeof(bands) / sizeof(bands[0]);
for ( i = 0; i < numBands; ++i ) {
printf ("%s\n", bands[i].name);
numMembers = sizeof(bands[i].members) / sizeof(bands[i].members[0]);
for ( j = 0; j < numMembers; ++j ) {
if (bands[i].members[j]) {
printf ("\t%s", bands[i].members[j]);
}
}
printf ("\n");
}
}
更深的:
const struct band bands[] = { {"Beatles", ...
形式bands
和大小bands[]
基于初始化器的数量。
char *members[20];
即使初始化没有提供 20 个字符串也是固定大小。第一个元素members[20]
根据列表进行初始化,其余元素的指针值为 0。