在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]。
files
被声明为"指向char的指针数组"。或者,如果您愿意,作为指向char的指针的二维数组。
所以files[i]
的类型是"指向字符的指针数组",但您将其用作"指向字符指针"。这是错误的。
也就是说,还不清楚你想做什么……也许只是:
char files[5][13];
会更有意义。13,因为您可能需要13个字符字符串(8.3是8+3+1=12加1作为结尾NUL),并且您似乎使用了其中的5个。然后将它们初始化为零:
memset(files, 0, sizeof(files));
并使用检查:
if (files[i][0])
以检查文本是否已初始化。
char* files[4][12]
是char *
的2D数组,而不是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]);
}