gpt4 book ai didi

C : assign value to uninitialzed struct and union

转载 作者:行者123 更新时间:2023-11-30 15:44:14 29 4
gpt4 key购买 nike

我在指针中得到了两个全局变量。我需要做的就是是将字符值赋给一些局部变量检查边界。

// global variable
char *min_ptr, *max_ptr ;

void markchar( char *x, int size, char marked)
{
// for every byte of x to have the value marked
int num_arr_elem = size/sizeof(char);
for (int i=0; i<num_arr_elem; i++) {
x[i] = marked;
}

}

我的分配如下:这是对的吗?我现在很困惑。如何使用全局最小和最大指针检查边界?如何将任何内容分配给未初始化的结构体、 union 体和数组?默认情况下它们都是空和零?但似乎我在执行以下操作时不断出错。

我需要这样做,以便稍后查看堆栈的哪一部分没有在最大和最小指针之间分配任何值...所以我需要以某种方式检查下面的一些值是否在这些边界之间,但它们甚至没有初始化,所以如何我要检查什么吗?

这是正确的吗?

int i ;
markchar( (char *) &i, sizeof(i), 0xa1 )

这是正确的吗?

struct sss {
char* a ;
char b[20] ;
float c ;
} s;
markchar( (char *) &s, sizeof(s), 0xb1 )

这是正确的吗?

union ccc {
float a ;
char b ;
int c ;
} u ;
markchar( (char *) &u, sizeof(u), 0xc1 )

这是正确的吗?

char aa[50] ;
markchar( (char *) &aa, sizeof(aa), 0xd1 )

我将不胜感激。我现在很失落。花了很多时间试图解决这个问题。

最佳答案

首先,您的示例中有很多冗余代码。

int num_arr_elem = size/sizeof(char);

您不必除以 sizeof(char),因为 sizeof char 保证始终为 1。

在示例中

char aa[50] ;
markchar( (char *) &aa, sizeof(aa), 0xd1 )

提供指向数组的指针也是错误的,因为 C 名称被隐式转换为指向第一个元素的指针,因此 markchar( aa, sizeof(aa), 0xd1 ) 就足够了。

关于初始化:如果该值是全局的,则默认初始化为 0。如果这是本地的,则它未初始化,因此变量“初始化”时会产生一些垃圾。如果你想用给定的模式填充任何变量(无论是普通变量还是结构体或数组),你可以使用memset。与您的代码相关的示例可能是:

char marked;    
memset(struct s, marked, sizeof(struct sss));

您也可以使用初始化程序来执行此操作,但这只能使用一次:

struct sss s = { 0 };

关于C : assign value to uninitialzed struct and union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19584760/

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