首页 > 解决方案 > 如何将字符收集到 C 中的字符串中?

问题描述

我需要为我的词法分析器收集一些字符到缓冲区中,但我不知道如何。我已经阅读了有关 stackoverflow 的一些答案,但这些是不同的情况。我有一个读取下一个字符的 while 循环,我想将逻辑放入其中,以便将新字符附加到内存中的缓冲区。

// init buffer with the first char 'h'
char *buffer = malloc(sizeof(char));
buffer[0] = 'h';
buffer[1] = '\0';

// go through input char by char
while(...)
{
   char c = read_next_char(); 
   buffer.append(c) // I whould do in JavaScript, but not in C :(
}


标签: ccharconcatenation

解决方案


char *buffer = malloc(sizeof(char));在您的情况下,您在开头分配一个字节并访问缓冲区 [1] 或任何其他索引是 UB。

您可以在开始时分配已知数量的字节并使用它,直到您看到需要更多缓冲区大小的点。

像这样的东西,

int buffersize = 100;
int index =0;
char *buffer = malloc(sizeof(char)*buffersize); //100bytes are allocated

if(!buffer)
    return;

buffer[index++] = 'h';
buffer[index++] = '\0';

// go through input char by char
while(...)
{
   char c = read_next_char(); 
   if(index == buffersize ){
      buffersize +=100;
       buffer= realloc(buffer, buffersize );
      //here buffer size is increased by 100
       if(!buffer) 
           return;
   }
   
   buffer[index++] = c ;
}

注意:buffer一旦使用结束,您必须释放它,否则会导致资源泄漏。


推荐阅读