【问题标题】:Converting a string into 2d array in c在c中将字符串转换为二维数组
【发布时间】:2021-06-16 15:17:35
【问题描述】:

您好,我一直在尝试将字符串映射转换为二维数组,但我更改的越多,我就越感到困惑。现在它没有编译并抱怨它的= 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);
}

【问题讨论】:

  • char **map 只是声明了一个指针。您必须使用 malloc 分配所需的内存。
  • 给我们一个示例输入以及您希望该输入的输出。你事先知道矩阵维度吗?
  • 什么是字符串映射?你能把它显示为文本吗?还是 ASCII 艺术?
  • 我添加了一些简单的测试器。我猜它根本不做数组,只是复制字符串。
  • j * sizeof(k) 为 0。

标签: arrays c string


【解决方案1】:

未测试。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多