【问题标题】:Returning structure containing int array from Structure Function从结构函数返回包含 int 数组的结构
【发布时间】:2019-05-06 21:50:02
【问题描述】:

main 函数没有打印与结构函数相同的 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;
}

【问题讨论】:

    标签: c arrays function struct return


    【解决方案1】:

    两个问题。

    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)

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多