如何将一个字符*分配给另一个字符*

问题描述 投票:0回答:2

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

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

string1 = string2; // error in the future code 

如何适当地做到这一点?

c pointers makefile char assign
2个回答
0
投票
char * string1 = malloc(sizeof(char));

请勿这样做。这将为单个字符分配空间,并将string1设置为指向该空间。在程序中这几乎是没有用的。通常,您希望将char *设置为指向比单个字符更多的空间,因为您将要使用多个单个字符。或者,您可以将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;是否适合您的程序取决于您要执行的操作。您需要在问题中提供有关上下文以及您在程序中尝试执行的操作的更多信息。


0
投票

使用strcpy()复制字符串。

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

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

strcpy(string1, string2);

请确保为要复制的最长字符串分配足够的空间,再为空终止符分配一个额外的字节。

© www.soinside.com 2019 - 2024. All rights reserved.