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

时间:2016-03-02 19:41:11

标签: c arrays string multidimensional-array

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

#include <stdio.h>
#include <stdlib.h>


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;
}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

将函数arrayToString更改为有两个参数。类型为char **,第二个类型为size_t,用于定义字符串数。还要将其返回值设为{{1返回指向已分配内存的指针。最后不要忘记释放内存。

char *