【问题标题】:How to make assign one char* to the another char*如何将一个 char* 分配给另一个 char*
【发布时间】:2020-02-05 02:47:15
【问题描述】:

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

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

string1 = string2; // error in the future code 

如何适当地做到这一点?

【问题讨论】:

  • string1= string2 是正确的,即使我认为您正在寻找 strcpy()
  • 您显示的代码有几个错误。此外,这看起来像一个 XY 问题。你能详细说明你真正想要做什么吗?
  • 您有内存泄漏。将指针分配给动态分配的内存后,用指向字符串文字的指针覆盖它们。
  • char *string1 = malloc(sizeof (char)) 几乎可以肯定是一个错误。您刚刚分配了足够的空间来存储一个字符。如果你想用它来存储一个字符串,你有足够的空间只存储空字符串(你只能存储空终止符)。

标签: c pointers makefile char assign


【解决方案1】:
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; 是否适合您的程序取决于您要执行的操作。您需要在问题中提供更多关于上下文以及您在程序中尝试做什么的信息。

【讨论】:

    【解决方案2】:

    使用strcpy() 复制字符串。

    char *string1 = malloc(6);
    char *string2 = malloc(6);
    
    strcpy(string1, "hello");
    strcpy(string2, "world");
    
    strcpy(string1, string2);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多