[英]Invalid use of void expression; copying info from array pointed to by void pointer; into array pointed to by char-pointer
[英]Point void-pointer to char-pointer
我有两个指针。 一个带有字符串“ test”的char
指针和一个void
指针。 我试图让pointer
指向string
的地址。 这是我的代码:
#include <stdio.h>
int main(){
void *pointer = NULL;
char *string = "test";
*(char*)pointer = &string;
printf("The string address: %p\n", string);
printf("The string: %s\n", string);
printf("The pointer address: %p\n", pointer);
printf("The pointer points to: %p", *(char*)pointer);
return 0;
}
当我将pointer
设置为与第6行上的string
的地址相等时,我makes integer from pointer without a cast
获取makes integer from pointer without a cast
。 我怎样才能做到这一点?
编辑:我打印了错误的地址。 我的意思是让printf行看起来像这样:
#include <stdio.h>
int main(){
void *pointer = NULL;
char *string = "test";
pointer = &string;
printf("The string address: %p\n", &string);
printf("The string: %s\n", string);
printf("The pointer address: %p\n", &pointer);
printf("The pointer points to: %p", pointer);
return 0;
}
现在可以正确打印出以下内容:
字符串地址:0028FF18
字符串:test
指针地址:0028FF1C
指针指向:0028FF18
因此, string
和pointer
是单独的指针,并且pointer
string
pointer
。
为什么不简单地做
#include <stdio.h>
int main(){
void *pointer = NULL;
char *string = "test";
pointer = &string; // point to the address of string
printf("The string address: %p\n", string);
printf("The string: %s\n", string);
printf("The pointer address: %p\n", pointer);
printf("The pointer points to: %p\n", (char*)(*(char**)(pointer)));
return 0;
}
void *pointer = NULL;
pointer
这里是类型的指针void
。 您需要先确保此指针指向某个有效的内存位置,然后再取消对其进行引用。
喜欢
pointer = string;
PS:这里的string
是字符串文字,因此如果您尝试写入此内存位置,则它是只读的,可能会出现分段错误。
如果您想将pointer
string指定的string
,
pointer = string;
作品。
如果您想将pointer
string
,
pointer = &string;
足够了。
您实际上所做的是将指针转换为char*
,并通过它进行分配,这是未定义的行为,因为pointer
为NULL
。
实际上,从&string
转换为char
可能也不起作用。
如果您希望有一个指向char指针string
的指针,那么您应该这样做:
pointer = &string
如果您希望有一个指向字符串“ test”的指针,那么您应该这样做:
pointer = string
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.