首页 > 解决方案 > 在C中交换二维字符串数组的行

问题描述

交换行以使数组按 ascii 升序排序的模块不断返回错误。

const int MAX = 10;
const int MAX_STR = 80;

void asciiOrder(char (*buffer)[MAX_STR]);

void asciiOrder(char (*buffer)[MAX_STR]) {

  char * temp;

  for (int i = 0; i < sizeof(buffer) / sizeof (buffer[0]) - 1; i++) {

    for (int j = 1; i + j < sizeof(buffer) / sizeof(buffer[0]); j++) {

      for (int k = 0; k < strlen(buffer[i]) && buffer[i][k] != NULL; k++) {

        if (buffer[i][k] > buffer[i+j][k]) {

          temp = buffer[i+j];
          buffer[i+j] = buffer[i];
          buffer[i] = temp;
          break;
        }
      }
    }
  }
}

这是我从整个代码中得到的错误:

practice102.c:87:23: error: assignment to expression with array type
           buffer[i+j] = buffer[i];
                       ^
practice102.c:88:21: error: assignment to expression with array type
           buffer[i] = temp;

我搜索了其他帖子,但仍然不知道为什么。如何解决这个问题呢?

标签: c

解决方案


C 禁止在不指定两个索引的情况下分配二维数组。你必须写一些像

buffer[a][b] = buffer[c][d]

无论您的 a、b、c、d 是什么。

还要确保您的缓冲区临时被填充和/或分配。


推荐阅读