C语言 布尔-255值

idv4meu8  于 2023-11-16  发布在  其他
关注(0)|答案(4)|浏览(160)

我定义了这个函数:

struct heap_validation {
    size_t num_alloc;
    size_t num_alloc_sz;
    struct memory *mem;
};
...
bool get_isallocated(struct metadata_record *);

字符串
当我从hashtable_traverse调用heap_validation函数并打印结果时,我得到了以下值:0,255,246

void hashtable_traverse(struct metadata_record *metarec,
        struct heap_validation *heap_val) {

    printf("get_isallocated(metarec): %d\n",get_isallocated(metarec));

    bool retrieved = false;
    bool allocated = get_isallocated(metarec);
    if (allocated) {
        heap_val->num_alloc += 1;


我也试了%d,得到了同样的结果。

gr8qqesn

gr8qqesn1#

如果不包含<stdbool.h>,则不能保证bool就是_Bool
在C++(§4.5/4)中,当一个值被转换为bool时,它将变成0或1:
bool类型的右值可以转换为int类型的右值,false变为0,true变为1。
在C(§6.3.1.2/1)中,当一个值被转换为_Bool时,它会变成0或1:
当任何标量值转换为_Bool时,如果该值比较等于0,则结果为0;否则,结果为1。
如果你得到的是0和1以外的值,那么bool不是_Boolget_isallocated()返回的是0或1以外的值:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  _Bool x=69;
  printf("x=%d\n",x);
  exit(EXIT_SUCCESS);
}

字符串
将打印出x=1

q9yhzks0

q9yhzks02#

事实证明,函数**hashtable_traverse(由 *GLib的 * g_hash_table_foreach()调用,以在 GHashTable 上进行遍历)需要keyvalue**。
我只有值和指向用户数据的指针。

  • metarec
    *key应为地址指针(第一个参数),heap_val为用户数据,在g_hash_table_foreach()中为可选
41zrol4v

41zrol4v3#

如果我理解正确的话,那么你可能想要布尔输出:

printf("get_isallocated(metarec): %d\n",get_isallocated(metarec)!=0);

字符串

printf("get_isallocated(metarec): %s\n",get_isallocated(metarec)!=0?"True":"False");


它将输出01

ozxc1zmp

ozxc1zmp4#

您应该从stdbool.hbool类型中获取值01
如果不是这样,要么是你的程序(可能是get_isallocated函数)调用了未定义的行为,要么你没有使用stdbool.hbool,而是使用了另一个标准整数类型的别名。

相关问题