关于指针和奇怪的错误

About pointers and strange error

我正在对指针进行非常简单的操作,但出现错误。我有一个获取块的函数,它是内存中连续的 "block",我想用下面的信息填充它。 blockmalloced,大小为 (sizeof(int)+12+size)。 username's length is 9 bytes (with the '\0')。

typedef const char* const UserName;

static void changeAllFields(void **block, UserName username, int size){
            *((int*)(*block)) = size;
            (*block) += sizeof(int);
            *((char*)(*block)) = NULL;
            (*block) += 2;
            strcpy(*block, username);
            (*block) += 9;
            *((char*)(*block)) = NULL;
            (*block) += size;
            *((char*)(*block)) = NULL;

我得到的错误:

assignment makes integer from pointer without a cast [-Wint-conversion]

指向:*((char*)(*block)) = NULL;

怎么了?

NULL 是一个指针值,但您将其写入类型为 char*((char*)(*block))。如果你真的想写一个值为零的char,它应该是:

*(char*)(*block) = 0;

另请注意,您在 (*block) += 2; 中对 void* 的算术运算是非法的,尽管某些编译器可能支持它们作为扩展。

因为 block 是一个 pointer to a pointer to void,当你在将它转换为 char* 的同时取消引用它两次时,它需要一个 char.


如果您希望它指向 NUL char,请执行

*((char*)(*block)) = '[=10=]';


如果你想让它指向一个 NULL 指针,只取消引用一次,比如

*block = NULL;