2015-12-13 13 views
-3

我做了一个较大的代码片段的最小工作示例。方法调用后的字节大小不正确

问题是,第一次调用16的sizeof打印的大小是正确的,第二次只打印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. Pick **一个**语言。而C不支持_methods_,但只支持_functions_。 – Olaf

回答

5

sizeof(test_array)sizeof(unsigned char *)如此尺寸的指针的。

+0

@dasblinkenlight:我同意OP的代码有UB(我在评论中指出它),但即使它是固定的,“sizeof(unsigned char *)”也不会是OP的期望。 – Jarod42

+2

虽然你的回答中没有提到UB,但是有点遗憾 –