将数组中的字符附加到字符指针

met*_*man 6 c c-strings string-literals

好的,所以我是一个通常会编写 Java/C++ 的人,而且我刚刚开始编写 C。我目前正在编写一个词法分析器,我无法忍受字符串在 C 中的工作方式,因为我可以'不执行字符串算术。所以这是我的问题:

char* buffer = "";
char* line = "hello, world";

int i;
for (i = 0; i < strlen(line); i++) {
    buffer += line[i];
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 C 中做到这一点?由于上面的代码不是有效的 C,我该怎么做呢?基本上我在循环一个 string line,并且我试图将每个字符附加到bufferstring 。

Vla*_*cow 1

#include <string.h>

//...

char *line = "hello, world";
char *buffer = ( char * ) malloc( strlen( line ) + 1 );

strcpy( buffer, line );
Run Code Online (Sandbox Code Playgroud)

尽管在 C 中字符串文字具有非常量数组类型,但最好使用限定符 const 来声明由字符串文字初始化的指针:

const char *line = "hello, world";
Run Code Online (Sandbox Code Playgroud)

C/C++ 中的字符串文字是不可变的。

如果您想附加字符,则代码可以如下所示(行的每个字符都在循环中附加到缓冲区)

#include <string.h>

//...

char *line = "hello, world";
char *buffer = ( char * ) malloc( strlen( line ) + 1 );

buffer[0] = '\0';
char *p = Buffer;

for ( size_t i = 0; i < strlen( line ); i++ )
{
    *p++ = line[i];
    *p = '\0';
}
Run Code Online (Sandbox Code Playgroud)

一般方法是找到指向终止零的指针,将其替换为目标字符,将指针前进并附加新的终止零。源缓冲区应足够大以容纳多一个字符。