如何将一个 char* 分配给另一个 char*

How to make assign one char* to the another char*

如何使 st1 = st2 如果它们都是 char*

char * string1 = malloc(sizeof(char));
char * string2 = malloc(sizeof(char));
string1 = "hello";
string2 = "world";

string1 = string2; // error in the future code 

如何适当地做到这一点?

char * string1 = malloc(sizeof(char));

不要那样做。这为单个字符分配 space 并设置 string1 指向那个 space。这在程序中几乎从来没有用过。通常,您希望将 char * 设置为指向比单个字符更多的 space,因为您将要处理多个字符。或者您可以将 string1 设置为 NULL,这表示它当前没有指向任何东西。

char * string1 = malloc(sizeof(char));
char * string2 = malloc(sizeof(char));
string1 = "hello";

这会导致“内存泄漏”,这意味着程序丢失了由 malloc 分配的内存。

一个字符串字面量如"hello"实际上是一个char的数组,它在整个程序运行期间都存在。当在这样的表达式中使用时,它会自动转换为指向该数组第一个字符的指针。因此 string1 = "hello";string1 设置为该字符的地址。这导致它忘记了它以前的值,来自 malloc(sizeof(char)).

string1 = string2; // error in the future code 

这可能是错误的,也可能不是。它将 string1 设置为指向与 string2 相同的位置。所以 string1string2 将指向相同的字符串,因此它们当然指向相等的字符串,因为字符串等于自身。

有时在使用指向 char 的指针时,我们希望将指针更改为指向不同的字符串,但有时我们希望将字符串从一个地方复制到另一个地方。因此,string1 = string2; 是否适合您的程序取决于您要做什么。您需要在您的问题中提供更多有关上下文以及您在程序中尝试执行的操作的信息。

使用strcpy()复制字符串。

char *string1 = malloc(6);
char *string2 = malloc(6);

strcpy(string1, "hello");
strcpy(string2, "world");

strcpy(string1, string2);

确保为要复制的最长字符串分配足够的 space,并为空终止符分配额外的字节。