【问题标题】:How to reorder places in char array如何重新排序char数组中的位置
【发布时间】:2015-06-27 13:05:52
【问题描述】:

我对这个lines[k] = lines[k+1]; 有疑问

这是我尝试做的:

char lines[MAXLINES][BUFSIZ];    
   for(k = 0;k < i;k++){
      char * tmp = lines[k];
      lines[k] = lines[k+1];
      lines[k+1] = tmp;
      change = 1;
    }

谁能帮我解决这个问题?我只想用数组中的lines[k+1]交换lines[k]...

【问题讨论】:

  • 您确定要for(k = 0;k &lt; i;k++){ 而不是for(k = 0;k &lt; i - 1;k++){

标签: c string multidimensional-array swap


【解决方案1】:

你不能分配给数组,你需要strcpy()

char lines[MAXLINES][BUFSIZ]

for (int k = 0 ; k < i ; ++k)
 {
    char tmp[BUFSIZ];
    strcpy(tmp, lines[k]);
    strcpy(lines[k], lines[k + 1]);
    strcpy(lines[k + 1], tmp);
    change = 1;
 }

由于lines[k]是一个数组,你不能赋值给它,但是你可以将lines[k]的内容复制到一个临时缓冲区,然后将lines[1 + k]的内容复制到lines[k],最后复制内容tmplines[1 + k]

【讨论】:

  • 啊哈,感谢您的解释,,,我是 C 新手,所以它与数组有点混淆。
  • 虽然在这里使用非连续内存(指向数组的指针数组)可能更合适,因为它可以避免复制的需要。
  • @DanielJour 绝对正确,但如果您没有经验,动态分配可能会很棘手。
  • 你会使用一个索引数组来保存指向原始数组中行的指针,并通过这些进行所有访问。与@DanielJour 的方法相同的内存占用,但没有动态内存。
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 2012-11-02
  • 2016-09-21
  • 2021-12-13
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多