我对指针进行非常简单的操作,但我得到了一个错误。我有一个功能,它得到一个块,这是一个连续的"块"在记忆中,我想填写下面的信息。 block
为malloc
,大小为(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;
有什么问题?
答案 0 :(得分:3)
NULL
是指针值,但您要将其写入*((char*)(*block))
,其类型为char
。如果你真的想写一个值为零的char
,它应该是:
*(char*)(*block) = 0;
另请注意,void*
上(*block) += 2;
的算术运算与FrameLayout
中的算术运算一样是非法的,尽管某些编译器可能会支持它们作为扩展名。
答案 1 :(得分:2)
由于block
是pointer to a pointer to void
,当您在将其转发到char*
时取消引用它时,它需要char
。
<小时/> 如果您希望指向
NUL
char
,请执行
*((char*)(*block)) = '\0';
<小时/> 如果你想让它指向
NULL
指针,只需取消引用一次,如
*block = NULL;