如何将指针分配给字符串并使用该指针对其进行修改?

How do I assign a pointer to a string and modify it using said pointer?

提问人:amongst3r 提问时间:11/12/2022 最后编辑:amongst3r 更新时间:11/12/2022 访问量:35

问:

假设我有一组结构,它们被定义为

typedef struct myS
{
    int content;
    char *string;
} myT;

我想通过指针更改第 0 个元素字符串的值,这样就不必直接通过结构访问它。

我所做的如下:

myT *tArray;
char **pString;

tArray = malloc(sizeof(myT));
tArray[0].string = "hello";
pString = malloc(sizeof(char *));
*pString = tArray[0].string;

我所期望的是,现在它指向 ,任何应用于 的更改都应该反映在 ,毕竟,这就是 和 发生的情况。但是,经过测试,这是我得到的:pStringtArray[0].stringtArray[0].string*pStringint*int

printf("%s %s ", tArray[0].string, *pString);
tArray[0].string = "hi";
printf("%s %s", tArray[0].string, *pString);
>hello hello hi hello

我真的不明白为什么仍然指向这里。pString"hello"

有没有办法通过另一个变量修改结构的值?

c 字符串 指针 malloc 结构

评论

1赞 500 - Internal Server Error 11/12/2022
首先:在编译器上启用所有警告,然后修复它们。
0赞 amongst3r 11/12/2022
@500-InternalServerError好吧,看来我忘了为myT分配内存。那现在怎么办?
1赞 500 - Internal Server Error 11/12/2022
你没有修改(指向什么),如果你尝试过,你可能会因为指向一个文本而崩溃,你无法写入它。您需要先将其复制到其他地方。 将另一个文字指针分配给 - 它不会更改原始指针。*pStringpStringtArray[0].stringtArray[0].string = "hi";tArray[0].string
0赞 Avi Berger 11/12/2022
而且你似乎想使用 pString 随时访问指向的任何内容,所以你希望它指向 tArray[0].string,而不是另一个曾经指向同一事物的指针。也许是这样的事情,尽管请注意@500-InternalServerError 关于不修改字符串文字的至关重要的评论。tArray[0].string
0赞 amongst3r 11/12/2022
@500-InternalServerError好的,如果我理解正确的话,它有自己的地址,并且首先指向它。然后,通过现在分配,他们俩都指向而不是指向 poiting 朝向?而指向 之后,它不会改变指向哪里?如果是这样,那么你已经回答了我的问题。至于解决方案,我已经尝试使用并继续使用,现在似乎并成功地指向相同的值,谢谢hello.stringpString = .stringhellopString.string"hello".string"hi"pStringmallocstrcpy.stringpString.string

答:

0赞 etsuhisa 11/12/2022 #1

您期待以下结果吗?

hello hello hi hi

然后,将 的地址设置为如下:.stringpString

#include <stdio.h>
#include <stdlib.h>

int main()
{
  typedef struct myS
  {
      int content;
      char *string;
  } myT;
  myT *tArray;
  char **pString;

  tArray = malloc(sizeof(myT));
  tArray[0].string = "hello";
  //pString = malloc(sizeof(char *));
  //*pString = tArray[0].string;
  pString = &tArray[0].string;

  printf("%s %s ", tArray[0].string, *pString);
  tArray[0].string = "hi";
  printf("%s %s", tArray[0].string, *pString);

  return 0;
}