更改C中指针的指针



我正在尝试编写一个void函数,该函数获取指向字符串(char**(指针的指针作为参数,并更改原始char*,使其指向另一个字符串,比如说"你好";。

下面是我写的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void change_ptr(char **str_ptr)
{
char hello[] = "hello";
char *hello_ptr = hello;
*str_ptr = hello_ptr;
}

int main()
{
char str[] = "yay";
char *str_ptr = str;
char **ptr_to_str_ptr = &str_ptr;
change_ptr(ptr_to_str_ptr);
printf("%sn", str);
return 0;
}

正如你所看到的,我得到了指向char*"的指针;yay";,将其传递给函数,并且在函数中我得到指向"的指针;你好";,并将*str_ptr(它是指向原始字符串的指针(更改为指向hello的指针。但当我在末尾打印str时,它会打印出";耶";。

我做错了什么?

(当我调试打印地址时,一切似乎都很好。(

这是有效的:

#include <stdio.h>
void change_ptr(const char ** str_ptr)
{
*str_ptr = "hello";
}
int main()
{
char str[] = "yay";
const char * str_ptr = str;
const char ** ptr_to_str_ptr = &str_ptr;
change_ptr(ptr_to_str_ptr);
printf("%sn", str_ptr);
}

注意,字符串";你好";在本例中是只读的,因为它是一个字符串文字。我在一些地方添加了const,所以提醒您注意这一点,如果您试图写入字符串,编译器会警告您。指针str_ptr可以修改,但不能修改字符串本身。

相关内容

  • 没有找到相关文章

最新更新