我有两个指针。一个char
指针,带有字符串" test"和一个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
。我该怎么做?
编辑: 我正在打印错误的地址。我的意思是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
。
答案 0 :(得分:2)
为什么不简单地做
#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;
}
答案 1 :(得分:1)
void *pointer = NULL;
pointer
这里是void
类型的指针。在解除引用之前,您需要首先确保此指针指向某个有效的内存位置。
像
pointer = string;
PS:这里string
是一个字符串文字,因此如果您尝试写入此内存位置,则它是只读的,您可能会遇到分段错误。
答案 2 :(得分:1)
如果您想将pointer
指向string
所针对的字符串,
pointer = string;
作品。
如果您想将pointer
指向string
,
pointer = &string;
就足够了。
您实际在做的是投射指向char*
的指针,并通过它指定未定义的行为pointer
为NULL
。
实际上,从&string
到char
的转换可能也不起作用。
答案 3 :(得分:0)
如果你想要一个指向char指针string
的指针,那么你应该这样做:
pointer = &string
如果你想要一个指向字符串“test”的指针,那么你应该这样做:
pointer = string