strcat将char连接到字符串上?

Bla*_*ary 10 c string concatenation char strcat

使用GDB,我发现在尝试此操作时出现了分段错误:

strcat(string,&currentChar);
Run Code Online (Sandbox Code Playgroud)

鉴于该字符串被初始化为

char * string = "";
Run Code Online (Sandbox Code Playgroud)

和currentChar是

char currentChar = 'B';
Run Code Online (Sandbox Code Playgroud)

为什么会导致分段错误?

如果strcat不能用于此,我怎么能将char连接到一个字符串?

gag*_*lo7 12

正如其他人的回应,¤tChar是指向charchar*的指针,但C中的字符串是char []const char*.

使用strcat将char连接到字符串的一种方法是创建最小字符串并使用它将char转换为字符串.

例:

制作一个简单的字符串,只有1个字符,后缀为'\ 0' ;

char cToStr[2];
cToStr[1] = '\0';
Run Code Online (Sandbox Code Playgroud)

适用于您的问题:

char * string = "";
char currentChar = 'B';
Run Code Online (Sandbox Code Playgroud)

cToStr将采用字符串"B":

cToStr[0] = currentChar;
Run Code Online (Sandbox Code Playgroud)

strcat会起作用!

strcat ( string, cToStr );
Run Code Online (Sandbox Code Playgroud)


Ela*_*fer 9

因为&currentChar它不是字符串,所以它不会以\0字符结束.你应该定义Bchar *currentChar = 'B';.另外根据http://www.cplusplus.com/reference/clibrary/cstring/strcat string应该有足够的空间来保存结果字符串(在这种情况下为2个字节),但它只有1个字节.

或者如果你想使用char那么你可以做类似的事情(取决于你的代码):

char string[256];
...

char currentChar = 'B';
size_t cur_len = strlen(string);
if(cur_len < 254) {
    string[cur_len] = currentChar;
    string[cur_len+1] = '\0';
}
else
    printf("Not enough space");
Run Code Online (Sandbox Code Playgroud)