如何从字符串数组C创建一个字符串

我正在学习arrays,并想知道是否有人可以帮助我。 我有一个字符串数组,需要创建一个新的字符串,它是所有数组元素的串联。 我遇到的问题是我只能打印我的数组中的第一个字符串,而不是所有字符串。 我知道我的数组中每个字符串的末尾都有一个null,那么我该如何解决这个问题呢? 也许2Darrays? 顺便说一下,我不允许使用string.h中的任何字符串操作函数。 谢谢。

#include  #include  int findLength(char array[]) { int i = 0; for (i = 0; array[i] != '\0'; i++) { } return i; } void arrayToString(char string[]) { int n = 0; int i = 0; int l = findLength(string); char *finalString; finalString = malloc(l * sizeof(char)); for (i = 0; string[i] != '\0'; i++) { finalString[n] = string[i]; n++; } for (i = 0; finalString[i] != '\0'; i++) { printf("%c", finalString[i]); } } int main(int argc, const char * argv[]) { char *color[] = { "red", "blue", "red" }; arrayToString(*color); return 0; } 

更改函数arrayToString有两个参数。一个类型为char ** ,第二个类型为size_t用于定义字符串数。还要让它的返回值为char *以返回指向已分配内存的指针。最后不要忘记释放这段记忆。

 #include  #include  int findLength(char array[]) { int i = 0; for (i = 0; array[i] != '\0'; i++) { } return i; } char* arrayToString(char **string, size_t size) { int bigSize = 0, len; int i = 0, j, k; for (j = 0; j < size; j++) { bigSize += findLength(string[j]); } char *bigstring = (char *)malloc(bigSize + 1); for (j = 0; j < size; j++) { len = findLength(string[j]); for (k = 0; k < len; k++) { bigstring[i++] = string[j][k]; } } bigstring[i] = '\0'; return bigstring; } int main(int argc, const char * argv[]) { char *color[] = { "red", "blue", "red" }; char *bigstring = arrayToString(color, 3); printf("%s\n", bigstring); free(bigstring); return 0; } 

您的代码中有几个问题,这是带注释的固定版本:

 size_t findLength(char* array[]) { size_t l = 0; while (char *t = *array++) while (*t++) l++; return l; } void copyAll(char* array[], char* out) { while (char *t = *array++) while (*t) *out++ = *t++; // copy every symbol from every line into out string *out = '\0'; // append last null-terminator } void arrayToString(char* array[]) { char* finalString = malloc((findLength(array) + 1) * sizeof(char)); // allocate + 1 symbol for null terminator copyAll(array, finalString); printf("%s", finalString); free(finalString); // don't forget to release memory } int main(int argc, char* argv[]) { char* color[] = { "red", "blue", "red", 0 }; // you should add array terminator as well arrayToString(color); return 0; }