在C中工作,我正在使用函数
中的char *返回值填充数组 char* files[4][12];
int i = 0;
for (;;)
{
char* file = get_value();
strcpy(files[i],file);
i++;
if (i > 4 || external_condition)
break;
}
// When I break out of
// my for loop the following
// code executes
for (i = 0; i < 5; i++)
{
if (files[i] != NULL)
manipulate(files[i]);
}
我的问题是,如果我在没有为文件的所有元素赋值的情况下突破第一个for循环,那么我在第二个for循环中的比较就会失败。如果只有文件[0]和文件[1]有内容,则循环处理文件[2],文件[3]和文件[4]。
答案 0 :(得分:3)
files
被声明为“指向char的指针数组”。或者,如果您愿意,作为指向char的二维指针数组。
所以files[i]
的类型是“指向char的指针数组”,但你只是将它用作“指向char的指针”。那是错的。
那就是说,目前尚不清楚你想做什么......也许只是:
char files[5][13];
会更有意义。 13因为你可能需要13个char字符串(8.3为8 + 3 + 1 = 12加1为结尾NUL),你似乎使用其中的5个。然后将它们初始化为零:
memset(files, 0, sizeof(files));
并使用支票:
if (files[i][0])
检查文本是否已初始化。
答案 1 :(得分:0)
char* files[4][12]
是char *
的二维数组,而不是char
。也许你的意思是你的代码如下......我建议你听别人说的话。我只是发布一个仍然有效的缩短版本。
char files[5][12] = { { 0 } };
int i = 0;
do {
strcpy(files[i], get_value());
} while (++i <= 4 && !external_condition);
while (i) {
manipulate(files[--i]);
}