gpt4 book ai didi

c - 函数调用中数据复制到函数参数不匹配

转载 作者:行者123 更新时间:2023-11-30 17:26:26 24 4
gpt4 key购买 nike

我在嵌入式 C 环境中有以下代码,编译器:Hightec (Big-Endian)

unsigned char GlobalVar;

Func_A()
{
unsigned char var1,Retval;
var1 = 0;

retval = Func_B(0,&var1);

}


unsigned char Func_B (unsigned char val, void* ptr )
{
unsigned long localvar;

localvar = (unsigned long)GlobalVar;
*(unsigned char*)ptr = (unsigned char)localvar;
return (0);
}

输入:全局变量 = 1 ,Func_A 调用 Func_B。

预期输出:Func_B 被调用,第二个参数更新为值 1。

我所看到的:Func_B 被调用,第二个参数的值为 64 (0100 0000)。

其他评论

1. Func_A is an application file.        
2. Func_B is part of a different software module.

3. Func_A reads the value from Func_B to do some action in application.
4. Func_B reads the value from a global variable (it is an array) and copies it into the second argument passed to it.
5. The second argument is a void* because Func_B can read different global variables and finally it would typecast based on parameter 1
(this part is not related, so i have excluded the related code)

你认为这里发生了什么?

已编辑

重新编辑

很抱歉我匆忙结束了问题

我在这里面临的问题

  1. var1FUNC_A 的局部变量
  2. 该值在 FUNC_B 中的 var1 地址中更新
  3. FUNC_B返回时,var1的值仍然是旧值。

我是如何解决的

  1. 我将变量 var1 设为全局变量。
  2. 我看到了数据

我怀疑什么

  1. var1 是在 FUNC_A 中分配的
  2. FUNC_A调用FUNC_B,分配的空间超出了数据更新范围

各位专家有何看法?我真的很想知道这种行为的根本原因是什么?

最佳答案

Unsigned long 为 4 字节长度,unsigned char 为 1 字节长度。您将 1 字节值分配给 4 字节值,然后再次将该 4 字节值分配给 1 字节值。 unsigned long 变量的剩余 3 个字节中可能存在垃圾值,并且可能会(基于字节顺序)分配给您的 unsigned char 变量。

关于c - 函数调用中数据复制到函数参数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com