如何在标准C语言中创建一个新的char*



我为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] = '';
    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] = '';
    return StrResult;
}

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

是的,你需要malloc,你在这里混淆了C和c++(因为new来自c++):

char *StrResult = (*char) malloc((strlen(Str) + 2) * sizeof(char));

char只接受一个字节(参见这个问题),所以你不需要乘以它的大小:

char *StrResult = (*char) malloc(strlen(Str) + 2);

单向:

char* ConcatCharToCharArray(char *Str, char Chr)
   {
   size_t StrLen = strlen(Str);
   char *StrResult = malloc(StrLen + 2); 
   if(NULL == StrResult)
      goto CLEANUP;
   strcpy(StrResult, Str);
   StrResult[StrLen++] = Chr;
   StrResult[StrLen] = '';
CLEANUP:
   return StrResult;
   }

然而,上面分配了一个新的字符串,而不是将一个字符连接到一个现有的字符串。下面是用一个额外字符扩展现有字符串的方法:

int StrConcatChar(char **string, char character)
   {
   int rCode=0;
   size_t stringLen;
   char *temp;
   if(NULL == string)
      {
      rCode=EINVAL;
      goto CLEANUP;
      }
    stringLen = *string ? strlen(*string) : 0;
    errno=0;
    temp=realloc(*string, stringLen+2);
    if(NULL == temp)
       {
       rCode=errno?errno:ENOMEM;
       goto CLEANUP;
       }
    *string=temp;
     (*string)[stringLen++] = character;
     (*string)[stringLen] = '';
CLEANUP:
   return(rCode);
   } 
上面的函数可以这样调用:
{
int rCode=0;
char *buffer=NULL;
buffer=strdup("Hello worl");
if(NULL == buffer)
   /* handle error condition */
rCode=StrConcatChar(&buffer, 'd');
if(rCode)
   /* handle error condition */
...
if(buffer)
   free(buffer);
}

相关内容

  • 没有找到相关文章

最新更新