0

在 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]。

4

2 回答 2

3

files被声明为“指向 char 的指针数组的数组”。或者,如果您愿意,可以将其作为指向 char 的指针的二维数组。

“指向char的指针数组”类型也是如此files[i],但您将其仅用作“指向char的指针”。那是错的。

也就是说,目前尚不清楚你想做什么......也许只是:

char files[5][13];

会更有意义。13,因为您可能需要 13 个字符字符串(8.3 是 8+3+1=12 加上 1 作为结尾的 NUL),并且您似乎使用了其中的 5 个。然后将它们初始化为零:

memset(files, 0, sizeof(files));

并使用检查:

if (files[i][0])

检查文本是否已初始化。

于 2012-09-01T19:48:12.967 回答
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]);
}
于 2012-09-01T21:05:58.837 回答