Возвращение структуры, содержащей массив int, из Structure Function - PullRequest
0 голосов
/ 05 декабря 2018

основная функция не печатает те же o / p, что и структурная функция Почему?

или

memcpy не копирует весь массив

, пожалуйста, помогите.

ожидается o / p

7 4 5 6 2

7 4 5 6 2

но

получение о / п

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 голосов
/ 05 декабря 2018

Две проблемы.

  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), когда массив передается в качестве параметра функции.

...