[英]Segfault when populating char* array
我正在尝试将以'\\ n'分隔的字符串拆分为字符串数组。 该字符串表示一个NxN矩形,因此矩阵上的每一行将包含相同数量的字符。 这是我尝试过的:
char **string_to_tab(char *str, int width, int height)
{
int i; //counter to scan str
int x; //counter for tab column no.
int y; //counter for tab row no.
char **tab;
i = 0; //I initialise variables
x = 0; //separately because I
y = 0; //like to :P
tab = (char**)malloc(sizeof(char) * height * width);
while (y < height)
{
while (x < width)
{
if (str[i] != '\n' || !(str[i]))
{
tab[y][x] = str[i]; //assign char to char* array
x++;
}
i++;
}
x = 0;
y++;
}
return (tab);
}
这给我带来了分段错误,调用它看起来像这样:
char *str = "+--+\n| |\n| |\n+--+";
char **matrix = string_to_tab(str, 4, 4);
您的变量tab
是指向指针的指针,但是您使用malloc
保留了单个字符数组。 如果要像代码中那样使用tab
作为指针数组,则必须先分配一个char
指针数组,然后再为每行分配一个char
数组。 但这很复杂。
使用char *tab;
应该更容易char *tab;
而是分配一个字符数组,就像您的代码一样。 您必须将元素访问权限更改为tab[y * width + x]
而不是tab[y][x]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.