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

use*_*674 0 c pointers char

如果我创建一个类似的字符串

char string[6] = "hello";
char* ptr = (char*) malloc(sizeof(string));
strcpy(ptr, string);
Run Code Online (Sandbox Code Playgroud)

然后我这样做:

char* ptr2 = ptr;
Run Code Online (Sandbox Code Playgroud)

它会起作用吗?

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

[编辑]

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

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

  2. 然后我必须调用一个foo(char* s)以字符串作为输入的函数.

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

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

直到现在我已经尝试了几种组合,但我无法达到我想要的效果.任何帮助表示赞赏.

Fre*_*Foo 5

char[6] string = "hello";
Run Code Online (Sandbox Code Playgroud)

根本不会工作.你的意思是char string[] = "hello";

是的,你可以互相指向别名,即指向同一个缓冲区.但请注意,不要free同时使用它们,或者在其中一个之后使用任何别名指针free.

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

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

是的,之后char *p2 = p1,你可以指向p1另一个缓冲区,但这主要用于棘手的指针算法.再次,小心内存分配.