【问题标题】:C pointer in char arraychar数组中的C指针
【发布时间】:2021-06-04 14:14:39
【问题描述】:

我试图了解我是否可以解决我遇到的问题,我想添加一个指向堆栈分配数组的数组成员的指针,以便该数组成员可以动态更改。

必须是无符号字符,因为这是一个通讯缓冲区。

int main() {
    unsigned char *var;
    unsigned char test[] = {*var, 0x34, 0x56, 0x78};
    *var = 0x12;
    printf("%x %x %x %x %x", *var, test[0],test[1],test[2],test[3]);
    *var = 0xff;
    printf("%x %x %x %x %x", *var, test[0],test[1],test[2],test[3]);
}

感谢您的任何回答,是或否。

编辑: 感谢所有建议,在尝试找到不同的方法之前,我已经研究过使用数组索引。问题是没有办法知道数组索引,因为正在编辑的数组被连接起来形成一个更大的数组,所以索引发生了变化,这就是我想使用变量的原因。

【问题讨论】:

  • 如果你想让var指向test的某个成员,使用char* var = test + ichar* var = &test[i]
  • "var" 变量指向堆栈中的某个未知位置。它没有提供可动态调整大小的数组。如果需要,请查看 malloc、calloc、realloc 函数。
  • 我不希望数组可以动态调整大小,只有 var 才能改变值,不幸的是我无法访问堆,所以这是我尝试解决这个问题的方法。
  • @Spoons 你看过我的评论了吗?试试看,我很确定应该可以。

标签: arrays c pointers


【解决方案1】:

你差不多了。试试这个:

int main()
{
    unsigned char* var;
    unsigned char test[] = { 0x00, 0x34, 0x56, 0x78 };
    var = &test[0];  // Makes var point to the first test[] item
    *var = 0x12;
    printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
    *var = 0xff;
    printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
}

【讨论】:

  • @Spoons 你看到我的回答了吗?这是你所期待的吗?如果是,请使用我的答案左侧的勾号将我的答案标记为已接受。谢谢。
【解决方案2】:

你的问题是你不明白指针是什么。

    unsigned char* var;
    unsigned char test[] = { 0x00, 0x34, 0x56, 0x78 };

这会调用未定义的行为。 var 是指向 char 但不指向任何地方的指针(它没有被初始化或以其他方式说它没有分配的引用)。 第二个定义simple 获取该指针引用的char 值(它不指向任何有效字符)并将该值作为数组test 的第一个元素。数组本身不包含有关所存储数据来源的任何信息。

要使此代码正常工作,您需要为指针分配数组第一个元素的引用。

int main(void)
{
    unsigned char test[] = { 0x00, 0x34, 0x56, 0x78 };
    unsigned char* var = test;  /* or &test[0] */

    *var = 0x12;
    printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);

    *var = 0xff;
    printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
}

小问题:您的main 声明无效。必须是int main(void)

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-09-26
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多