从结构函数返回包含int数组的结构

时间:2018-12-05 10:39:19

标签: c arrays function struct return

主要功能无法打印出与结构功能相同的o / p为什么?

memcpy不会复制整个数组

请帮助。

预期o / p

7 4 5 6 2

7 4 5 6 2

但是

获取o / p

7 4 5 6 2

7 4垃圾垃圾

提前谢谢。

#include <stdio.h>
#include <string.h>
struct Result {
    int output[100];
};

struct Result my(int length, int path, int input[]){
    int temp=input[path-1];
    for(int i=path-1; i>0; --i){
        input[i]=input[i-1];
        }
        input[0]=temp;

        for (int i = 0; i <= length; i++) {
            printf(" %d",input[i]);
        }

        struct Result result;
        memcpy (result.output, input, sizeof(strlen(input)));
    return result;
}

int main(void){
    int a[]={4,5,6,7,2};
    struct Result res = my(4,4,a);

    printf("\n");

    for (int i = 0; i <= 4; i++) {
        printf(" %d",res.output[i]);
    }
return 0;
}

1 个答案:

答案 0 :(得分:0)

两个问题。

  1. 您不能将strlen用于int数组。
  2. memcpy需要复制的字节数。

因此更改

 memcpy (result.output, input, sizeof(strlen(input)));

  memcpy (result.output, input, sizeof(input[0])*(length+1)); //length+1 since your passing array length-1
  

注意:将数组作为参数传递给函数时,sizeof(input)sizeof(pointer)