c - 如何在标准 C 中创建一个新的 char*

标签 c memory malloc arrays strlen

我有为 C++ 编写的代码(有效):

char* ConcatCharToCharArray(char *Str, char Chr)
{
    char *StrResult = new char[strlen(Str) + 2]; 
    strcpy(StrResult, Str);
    StrResult[strlen(Str)] = Chr;
    StrResult[strlen(Str) + 1] = '\0';
    return StrResult;
}

/* Example: String = "Hello worl"
Char = "d"
Final string = "Hello world" */

小问题是我正在 Ubuntu 中制作一个标准的 C 程序,我需要这段代码。 并且“new”没有被识别为保留字,它下面甚至有一个红色标记。

我试过:char *StrResult[strlen(Str) + 2],但它不起作用,因为这种方式只接受常量值。我猜“malloc”将是这里的标准 C 解决方案,我怎么能用“malloc”或任何其他方式做到这一点呢?太感谢了。

最佳答案

new 是分配内存的 C++ 方式。在 C 中你是对的,你需要使用 malloc

char* ConcatCharToCharArray(char *Str, char Chr)
{
    size_t len = strlen( Str );
    char *StrResult = malloc( len + 2 );
    /* Check for StrResult==NULL here */
    strcpy(StrResult, Str);
    StrResult[len] = Chr;
    StrResult[len+1] = '\0';
    return StrResult;
}

当你用完内存后,你会调用free( StrResult )

关于c - 如何在标准 C 中创建一个新的 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254243/

相关文章:

c - 如何在 64 位 ubuntu 上安装 32 位 glibc

c - 这4K有什么区别?

swift - C 中的 offsetof(struct, member) 在 Swift 中的等价物是什么?

c - malloc() 内存损坏

java - 如何在 Mac 中获取 Tomcat 的堆转储和线程转储

c - 使用用户定义的函数检查 malloc 是否成功是一个坏主意吗?

c - 向数组中插入一个值,并根据值c排列数组

c - 如何检查 Gtk ListStore 中是否已存在值以避免重复?

c - 如何正确释放我的阵列而不会出错?

将全局 char** 复制到新的 char**