【问题标题】:Changing element of malloc'd String in C? [closed]在C中更改malloc'd字符串的元素? [关闭]
【发布时间】:2018-03-06 22:51:19
【问题描述】:

这样做之后,

char* example = (char*)malloc(10);

如何将第 5 个字节更改为“a”,以便 printf("%s", example); 给我 " a "

【问题讨论】:

  • malloc() 返回的不是字符串,而是未初始化的缓冲区。在更改“字符串”之前,您必须先用一些字符串对其进行初始化。
  • a[4] = 'a';。但是您也需要添加这些空格,并且不要忘记空终止符 (a[9] = '\0';)。另外,不需要转换malloc() 的结果。请改用char *example = malloc(10);
  • 如何将所有字节初始化为空" "?
  • malloc的返回不用强制转换,没必要。请参阅:Do I cast the result of malloc? 和... memset (example, ' ', 9);example[9] = 0; 然后 example[4] = 'a';
  • 如何将所有字节初始化为空""?memset(example, ' ', 9); a[9] = '\0';

标签: c string malloc


【解决方案1】:

你可以像下面这样简单地做到这一点:-

memset(example, ' ',10);
example[9] = 0; //assign end of string character equal to '\0'
example[4] = 'a';

它将如何运作? memset 将用空白填充所有字节,example[9] = 0; 将为其分配一个字符串结尾字符,example[4] = 'a'; 将在第 5 个位置分配 'a'

【讨论】:

    【解决方案2】:

    malloc 返回的内存是未初始化的。除了将第 5 个字节设置为'a' 之外,您还需要将其他字节设置为空格,并且您需要添加一个空终止字节。

    最简单的方法是strcpy:

    strcpy(example, "    a    ");
    

    【讨论】:

      【解决方案3】:

      要更改单个元素,只需使用常规数组下标表示法:

      example[4] = 'a';
      

      但是请注意,malloc 不会将内存初始化为任何特定值 - 它(很可能)不会全为空白或全为 0。这将是不确定的。如果您希望 'a' 周围的元素为空白,您还必须明确指定它们。另外,请记住在末尾写 0 终止符,否则 example 将不包含 字符串

      您可以使用strcpy 将新字符串分配给example

      strcpy( example, "    a    " ); // 9 characters plus string terminator
      

      或者您可以逐个元素分配:

      for ( size_t i = 0; i < 3; i++ )
        example[i] = ' ';
      
      example[4] = 'a';
      
      for ( size_t i = 5; i < 9; i++ )
        example[i] = ' ';
      
      example[9] = 0; // don't forget the string terminator!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2013-11-08
        • 2013-06-23
        • 1970-01-01
        • 2013-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多