gpt4 book ai didi

c - 在 C 中,我可以将字符串保留为 char*,然后使用指针指向其他字符串吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:25 26 4
gpt4 key购买 nike

如果我创建一个像这样的字符串

char string[6] = "hello";
char* ptr = (char*) malloc(sizeof(string));
strcpy(ptr, string);

然后我这样做:

char* ptr2 = ptr;

会成功吗?

一般来说,如果我有一个 char* 指针指向一个字符串,我可以让其他指针指向那个字符串,而初始指针指向另一个字符串吗?

[编辑]

感谢您的反馈,但我有点困惑。我会尝试从头开始。

  1. 我有一个 main,我在其中执行 scanf 以读取大小不固定但具有 MAX 长度的字符串。我是这样读的 char* input; scanf("%as", &input);.我认为“a”标志会自动分配所需的内存以适应字符串。

  2. 然后我必须调用函数 foo(char* s),它将字符串作为输入。

  3. 在该函数中,我必须将字符串存储在内存中。我有两个选择:要么使用参数,要么创建一个新的 malloc 和 strcpy 并使用新的字符串。两者哪个是正确的?我只需要存储字符串的内存位置,以备后用。

  4. 如果我使用参数并将它的内存位置存储在某处,这是否安全,或者因为指向字符串的指针是常量,它会导致任何问题吗?使用 malloc 制作另一个字符串会解决任何问题还是同一件事?

到目前为止,我已经尝试了几种组合,但我无法实现我想要的。感谢您的帮助。

最佳答案

char[6] string = "hello";

根本行不通。你是说 char string[] = "hello";

是的,你可以让指针别名彼此,即指向同一个缓冲区。请注意不要同时释放它们,或者在其中一个被释放之后使用任何别名指针。

事实上,这非常有用。考虑 strcpy 的典型实现,它必须返回它的第一个参数:

char *strcpy(char *dest, char const *src)
{
char *p = dest; // aliasing pointers
while (*src != '\0')
*p++ = *src++;
return dest;
}

是的,在 char *p2 = p1 之后,您可以将 p1 指向另一个缓冲区,但这主要用于棘手的指针算法。同样,请注意内存分配。

关于c - 在 C 中,我可以将字符串保留为 char*,然后使用指针指向其他字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com