strcat将char连接到字符串上?

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

strcat(string,&currentChar); 

鉴于该字符串被初始化为

 char * string = ""; 

和currentChar是

 char currentChar = 'B'; 

为什么会导致分段错误?

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

因为&currentChar不是字符串,所以它不会以\0字符结束。 你应该把B定义为char *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"); 

正如其他人所做的那样&currentChar是指向charchar *的指针,但C中的字符串是char []const char *

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

例:

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

 char cToStr[2]; cToStr[1] = '\0'; 

适用于您的问题:

 char * string = ""; char currentChar = 'B'; 

cToStr将采用字符串“B”:

 cToStr[0] = currentChar; 

strcat会起作用!

 strcat ( string, cToStr ); 

strcat()接受两个’\ 0’终止的字符串。 传递字符的地址时,例程将查看字符后面的内存,查找终结符。

由于您不知道内存甚至引用了什么,因此在代码访问它时应该会遇到问题。

除此之外,您的字符串参数没有空间可以附加任何字符。 写入的内存在哪里? 它将尝试写入超过与此字符串关联的内存的末尾。

我认为最简单的方法(效率不高)将是sprintf

sprintf(str, "%s%c", str, chr);

两个字符串都必须以空值终止。 单个char不会以空值终止,因此当strcat停止将字符连接到末尾时,它是未定义的。 此外,字符串必须至少包含原始字符串和结果字符串的足够空间。

这有效:

 char string[10] = ""; char* currentChar = "B"; strcat(string, currentChar); 

strcat的第一个参数必须有足够的空间来容纳字符串的其余部分。 “”是一个常量字符串,因此GCC不会分配空间。

使它成为一个有足够空间的数组:

 char buf[1024]; strcat(buf, ""); strcat(buf, "B");