【问题标题】:Copying 2D arrays in C在 C 中复制二维数组
【发布时间】:2016-05-08 08:53:54
【问题描述】:

我正在尝试将一些二维字符串数组复制到另一个数组中。 我有 2 个如下所示的数组:

char *tabA[SIZE];
char *tabB[SIZE];

我想将tabA[indexA] 复制到tabB[indexB],但strcpy(tabB[indexB], tabA[indexA]) 根本不起作用,程序崩溃(但编译器不返回任何错误)。

【问题讨论】:

  • 在 strcpy()'ing 之前,您是否根据需要 malloc() 进行了所有操作?
  • 复制它指向的内存指针?

标签: c arrays copy 2d copying


【解决方案1】:

strcpy(tabB[indexB], tabA[indexA]) 根本不起作用,程序得到 崩溃了

可能是因为tabB[indexB] 未初始化且包含NULL 或无效指针。

解决方案
将内存分配给tabB 静态使用二维数组char tabB[SIZE1][SIZE2] = {{0}}; 或动态for(i = 0; i < SIZE; ++i) tabB[i] = malloc(...); 或使用strdup。在动态分配的情况下,请确保您free 并且不要泄漏内存。

【讨论】:

    【解决方案2】:

    我正在使用来自string.hmemcpy,原型如下:

    void *memcpy(void *dest, const void *src, size_t n);
    

    memcpy()函数将n个字节从内存区src复制到内存中 区域目的地。

    更多详情请阅读memcpy 的手册,在终端上使用命令man memcpy

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    const size_t SIZE=8;
    
    int main()
    {
      char *data[] = {"jan", "fev", "mar", "apr", "mai", "jun", "jul", "aug"};
      char *data2[SIZE];
    
      memcpy(data2, data, sizeof(char*) * SIZE);
    
      for (int i = 0; i < 8; ++i)
        printf("data = %s, data2 = %s\n", data[i], data2[i]);
    
      return (0);
    }
    

    【讨论】:

    • @MohitJain sizeof(char*) 不是 sizeof(char)
    【解决方案3】:
    tabB[indexB] = strdup(tabA[indexA]);
    

    完美运行 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多