如何在标准C中创建新的char *

sou*_*zer 3 c memory arrays malloc 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" */
Run Code Online (Sandbox Code Playgroud)

小问题是我正在Ubuntu中制作一个标准C程序,并且需要此代码。而且,“新”不会被识别为保留字,甚至在其下还会有一个红色标记。

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

Gra*_*row 5

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;
}
Run Code Online (Sandbox Code Playgroud)

内存用完后,请致电free( StrResult )