在c中将字符串转换为二维数组

时间:2021-06-16 15:17:35

标签: arrays c string

嗨,我一直在尝试将字符串映射转换为二维数组,但是我更改的越多,我就越困惑。现在它不编译并抱怨它的 = NUL(编辑我添加了 malloc 并且似乎并给出了分段错误)。

#include <unistd.h>
#include <stdlib.h>


char    **stoa(char *str)
{
    int i;
    int j;
    int k;
    char **map;
    
    //int len = ft_strlen_line(str);
    //int row = ft_strlen(str);
    
    
    i = 0;
    j = 0;
    k = 0;
    
    //arow = row/len;
    //map = malloc(j * k sizeof(char*));
    
    map = malloc(j * sizeof(k));
    while(str[i])
    {
         if (str[i] == '\n')
        {
            k = 0;
            j++;
        }
    map[j][k] = str[i]; 
     k++;
     i++;
    }
    free(map);
    return (map);
    if (!(map = malloc(j * k * sizeof(char))))
    
    return NULL;
}



int main(void)
{
    
    char row12[] = "ABABABABAB\nABABABABAB\nABABABABAB\n\0";
    char **map;
    map = stoa(row12);

   
    return (0);
}

1 个答案:

答案 0 :(得分:0)

未测试。

char **stoa(char *str)

    size_t nlines = 0;
    size_t pos = 0;
    char **array = NULL;
    char **tmp;

    while(*str)
    {
        while(*str && str[pos++] != '\n');
        nlines++;
        tmp = realloc(array, (nlines + 1) * sizeof(*array));
        if(tmp) array = tmp;
        else break;
        array[nlines] = NULL;
        if(array[nlines - 1] = malloc(pos + 2));
        if(array[nlines - 1])
        {
            memcpy(array[nlines - 1], str, pos);
            array[nlines - 1][pos] = 0;
            str = str + pos;
            if(str == '\n') str++;
            pos = 0;
        }
        else break;
    }
    return array;
}