2015-12-13 3 views
-3

Я сделал этот минимальный рабочий пример более крупного кода, который у меня есть.Неправильный байтаз после вызова метода

Проблема заключается в том, что sizeof отпечатков для первого вызова 16, который является правильным размером, и для 2-го вызова только 8. Самое странное, оно всегда печатает 8, независимо от размера структуры, независимо от того, в нем есть только одно значение или 10 значений.

struct test_struct 
{ 
    int32_t val1; 
    int32_t val2; 
    int32_t val3; 
    int32_t val4; 
}; 

unsigned char * StructToChar(test_struct structy) 
{ 
    unsigned char returnval[sizeof(structy)]; 
    memcpy(returnval, &structy, sizeof(structy)); 
    return returnval; 
} 

int main() 
{ 
    test_struct sendstruct = {}; 
    unsigned char *test_array = StructToChar(sendstruct); 

    unsigned char returnval[sizeof(sendstruct)]; 
    memcpy(returnval, &sendstruct, sizeof(sendstruct)); 

    printf("%d\n", sizeof(returnval)); 
    printf("%d\n", sizeof(test_array)); 
    return 0; 
} 
+3

Вы не должны возвращать указатель локальной переменной. – Jarod42

+0

Похоже, C. C не C++ не C. Выберите ** один ** язык. И C не поддерживает _methods_, а только _функции_. – Olaf

ответ

5

sizeof(test_array) является sizeof(unsigned char *) так размер указателя.

+0

@dasblinkenlight: Я согласен, что код OP имеет UB (я указал его в комментарии), но даже если он исправлен, 'sizeof (unsigned char *)' не будет ожиданием OP. – Jarod42

+2

Немножко не упоминать UB в вашем ответе, хотя –

Смежные вопросы