如何将数组中的字符转换为字符串

时间:2015-09-29 23:22:31

标签: c arrays string

我很难将数组的字符值附加到字符串(handSorted)上。 hand[]是预定义的文本数组。

char *handSorted = malloc(strlen(hand)+1);
strcat(handSorted, hand[2]);

例如,我希望handSorted是值hand[2]的字符串,字母'A'。

2 个答案:

答案 0 :(得分:3)

在处理C时,最好学习如何使用终端中的手册页。这是strcat的条目。

DESCRIPTION
 The strcat() and strncat() functions append a copy of the 
 null-terminated string s2 to the end of the null-terminated
 string s1, then add a terminating `\0'.  

这是一个问题。你需要handSorted为null终止。

char *handSorted = malloc(strlen(hand)+1);
handSorted[0] = '\0';
strcat(handSorted, hand[2]);

但仍有问题。 hand[2]是单个字符,strcat()需要一个字符指针,AKA是一个字符串。所以你需要使用'address-of'运算符 - &amp ;.传递一个字符的地址。像这样。

char *handSorted = malloc(strlen(hand)+1);
handSorted[0] = '\0';
strcat(handSorted, &hand[2]);

我认为这就是我们所追求的目标。

答案 1 :(得分:0)

strcat函数要求两个参数都是以空字符结尾的字符串(也是指针),因为你按值传递给一个字符会导致未定义的行为(可能是段错误因为它会尝试读取可能在分配区域之外的低内存地址。)

如果您要添加单个字符,也可以直接设置字符值:

size_t charLength = strlen( handSorted );
assert( charLength < sizeof( handSorted ) + 1 ); // assuming handSorted hasn't decomposed from char[N] to char*.
handSorted[ charLength     ] = hand[2]; // overwrite existing null-terminator with desired char
handSorted[ charLength + 1 ] = '\0'; // set new null-terminator