关于指针和奇怪的错误
About pointers and strange error
我正在对指针进行非常简单的操作,但出现错误。我有一个获取块的函数,它是内存中连续的 "block",我想用下面的信息填充它。 block
是 malloc
ed,大小为 (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;
我正在对指针进行非常简单的操作,但出现错误。我有一个获取块的函数,它是内存中连续的 "block",我想用下面的信息填充它。 block
是 malloc
ed,大小为 (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;