关于指针和奇怪的错误

时间:2015-12-22 18:40:32

标签: c pointers memory-address

我对指针进行非常简单的操作,但我得到了一个错误。我有一个功能,它得到一个块,这是一个连续的"块"在记忆中,我想填写下面的信息。 blockmalloc,大小为(sizeof(int)+ 12 + size)。 username的长度为9个字节(' \ 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;

有什么问题?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

由于blockpointer to a pointer to void,当您在将其转发到char*时取消引用它时,它需要char

<小时/> 如果您希望指向NUL char,请执行

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

<小时/> 如果你想让它指向NULL指针,只需取消引用一次,如

*block = NULL;