【问题标题】:Add a character to a character pointer which is initialized with a string in c [duplicate]向用c中的字符串初始化的字符指针添加一个字符[重复]
【发布时间】:2021-03-28 23:58:33
【问题描述】:

我声明了一个字符指针并动态分配内存并用字符串初始化它现在我想向指针添加字符。我尝试了以下代码,但它给出了分段错误(核心转储)错误。

#include <stdio.h>

int main()
{
    char *ch;
    ch = (char *)malloc(sizeof(char)*32);
    ch = "hello";
    ch[5] = 'k';
    ch[6] = '\0';
    printf("%s", ch);
    return 0;
}

【问题讨论】:

  • ch = "hello" 会覆盖指针,从而丢弃malloc 内存。此外,它指向一个无法写入的字符串文字。请改用strcpy
  • 请不要转换malloc的返回值。有关详细信息,请参阅here

标签: c char-pointer


【解决方案1】:

是的,您已经为 ch 指针分配了 32 个字符。但是在下一行,您将重新分配另一个静态分配的字符串给它,它会覆盖指向存储在 ch 中的动态内存的指针。

  ch = (char *)malloc(sizeof(char)*32);
  ch = "hello";

这样做的结果是,您丢失了动态内存的句柄,现在您无法使用 free() 释放该内存。 如果你想将“hello”分配给ch,你可以使用中定义的strcpy函数来完成。

#include <stdio.h>
#include <string.h>
int main()
{
    char *ch;
    ch = (char *)malloc(sizeof(char)*32);
   // ch = "hello";
    strcpy(ch, "hello");
    ch[5] = 'k';
    ch[6] = '\0';
    printf("%s", ch);
    free(ch);
    return 0;
}

Strcpy 只是遍历数组并一个一个地分配每个字符。也永远不要忘记释放分配的动态内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2016-10-19
    • 2014-09-26
    • 2017-07-24
    • 2012-09-27
    • 2010-12-12
    相关资源
    最近更新 更多