1

我正在尝试使用以下函数将向量转换为字符串。

char* my_vect2str(char** input)
{
    int i;
    char* ret = (char*)xmalloc(sizeof(char*));
    for(i=0; input[i] != NULL; i++)
    {
        if(*input[i] == '\0')
            ret[i] = ' ';
        else
            ret[i] = *input[i];
    }
    ret[i] = '\0';
    return ret;
}

这似乎只是获取向量中每个字符串的第一个字符。如何更改我的 for 循环以使其正常工作?谢谢!

4

2 回答 2

0

您的 malloc 应该是指针内容的大小,而不是指针本身。您也不需要强制转换 malloc void *。您需要一个内部循环计数器才能遍历指针的两个维度。这应该有效:

char* my_vect2str(char** input)
{
    int i;
    int count = 0;
    char* ret = (char*)malloc(sizeof(char*)); // should be a larger size
    for(i=0; input[i] != NULL; i++)
    {
        int j = 0;
        while(1){
            if(input[i][j] == '\0'){
                ret[count++] = ' ';
                break;
            }else{
                ret[count++] = input[i][j];
            }
            j++;
        }
    }
    ret[count] = '\0';
    return ret;
}
于 2013-02-24T23:18:34.690 回答
0

第一个循环计算输入中字符串的总大小。然后,分配空间并将字符串连接到 ret。

char* my_vect2str(char** input)
{
    int i, j, k = 0;
    char* ret;
    int size = 0;
    int len;
    char* inp = input[k++];

    while (inp != NULL) {
        size += strlen(inp);
        inp = input[k++];
    }

    ret = malloc((size * sizeof(char)) + 1);
    memset(ret, 0, size + 1);

    i = 0;
    j = 0;
    while (i < size) {
        if (input[j] != NULL) {
            len = strlen(input[j]);
            memcpy(&ret[i], input[j], len);
            i += len;
        }
        ++j;
    }

    return ret;
}
于 2013-02-24T23:25:06.960 回答