【问题标题】:Copying a 1D array to a row of 2D array using memcpy使用 memcpy 将一维数组复制到一行二维数组
【发布时间】:2020-04-02 05:13:42
【问题描述】:

我正在尝试使用 memcpy 将一维数组复制到二维数组的特定行。我尝试在OnlineGDB 上编译以下代码,但它打印垃圾值,然后给出分段错误。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
     int arr1[5] = {34, 45, 89,123,56};
     int arr2[2][5];
     memcpy(arr2[0],arr1,sizeof(arr2[0]));
     // arr1[5] = {89,45,90,15,23};
     memcpy(arr2[1],arr1,sizeof(arr2[1]));

     for(int i=0;i<2;i++) {
        for(int j=0;i<5;j++) {
            printf("%d ",arr2[i][j]);
        }
        printf("\n");
     }
     return 0;
}

有人能解释一下使用 memcpy 编码的正确方法是什么吗?

【问题讨论】:

  • 在第二个for 中,你得到的是i&lt;5 而不是j&lt;5,所以循环永远不会结束
  • @DenisSheremet 非常感谢它现在的工作。在这里发布问题之前,我应该更加小心。
  • 只是证明你是人类而不是一些自动化的bot...

标签: c arrays


【解决方案1】:

问题在于内部循环中的条件 (i&lt;5)。

这是一个修复(删除了硬编码)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
     int arr1[] = {34, 45, 89, 123, 56};
     int arr2[2][sizeof arr1 / sizeof *arr1];
     memcpy(arr2[0], arr1, sizeof arr1);
     memcpy(arr2[1], arr1, sizeof arr1);

     for (int i = 0; i < sizeof arr2 / sizeof *arr2; i++) {
        for (int j = 0; j < sizeof arr2[i] / sizeof *arr2[i]; j++) {
            printf("%d ", arr2[i][j]);
        }
        printf("\n");
     }
     return 0;
}

【讨论】:

  • 哎呀。我复制粘贴了错误的版本。感谢您的关注。我已经编辑过了。
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2018-01-09
相关资源
最近更新 更多