【问题标题】:C "Error: Invalid initializer"C“错误:初始化程序无效”
【发布时间】:2018-07-26 08:21:50
【问题描述】:

下面的短代码sn-p会导致invalid initializer错误,作为C的初学者,我不明白为什么。

unsigned char MES[] = { 0x00, .... };
unsigned char *in[] = &MES;

这不是正确的做法吗?

【问题讨论】:

标签: c


【解决方案1】:

&MES 是指向unsigned char 数组的指针。

in 是指向unsigned char 的指针数组。

试试吧:

unsigned char (*in)[] = &MES;

这使得in 也是一个指向unsigned char 数组的指针。

【讨论】:

    【解决方案2】:

    我认为您要实现的目标如下:

    unsigned char MES[] = { 0x00 };
    unsigned char *in = MES;
    

    in 限定为数组(其大小未知)如下

    unsigned char (*in2)[] = &MES;
    

    不会向它添加有价值的信息,除非它具有有限的大小(对于任何数据都是如此)并且如果您打印 inin2

    printf ("%lx\n", (long unsigned int) in);
    printf ("%lx\n", (long unsigned int) in2);
    

    值应相同。

    不要将数据的位置与其引用的位置混淆。

    使用&MES 就像试图读取内存中写入数组位置的位置。但这并不存在。

    考虑反例:

     void *reference_to_memoryarea = malloc(3);
     void **reference_to_the_reference = &reference_to_memoryarea;
    

    这里位置存在并且在内存中有一个位置,它被存储在哪里。你可以写信到*reference_to_the_reference 并产生一个很好的泄漏

    【讨论】:

    • 感谢您的解释。
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多