繁体   English   中英

将空指针指向字符指针

[英]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

因此, stringpointer是单独的指针,并且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* ,并通过它进行分配,这是未定义的行为,因为pointerNULL
实际上,从&string转换为char可能也不起作用。

如果您希望有一个指向char指针string的指针,那么您应该这样做:

pointer = &string

如果您希望有一个指向字符串“ test”的指针,那么您应该这样做:

pointer = string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM