我有这个函数将一维数组转换为二维数组。当我转换它时,我需要在每个4x4平方之间保留\n
(换行符)。
int count_words(const char *str, char c)
{
int i;
int count;
i = 0;
count = 0;
while (str[i])
{
while (str[i] && str[i] == c)
i++;
if (str[i])
{
count++;
while (str[i] && str[i] != c)
i++;
}
}
return (count);
}
char *get_word(const char *str, char c)
{
char *word;
int i;
i = 0;
word = (char*)malloc(sizeof(char) * 500);
while (str[i] && str[i] != c)
{
word[i] = str[i];
i++;
}
word[i] = '\0';
return (word);
}
char **ft_strsplit(const char *s, char c)
{
char **split;
int words;
int i;
i = 0;
words = count_words(s, c);
split = (char**)malloc(sizeof(char*) * words + 1);
if (split == NULL)
return (NULL);
while (*s)
{
if (*s == c)
s++;
if (*s)
{
if (*s == c)
{
split[i] = ft_strdup("\0");
s++;
//printf("=========>%s\n", split[i]);
i++;
}
else{
split[i] = get_word(s, c);
s = s + ft_strlen(split[i]);
//printf("%s\n", split[i]);
i++;}
}
}
split[i] = NULL;
int k = 0;
while (split[k])
{
printf("%s\n", split[k]);
k++;
}
return (split);
}
这是输入文件:
这是在这个一维字符串(const char *s
)中转换的:
#...\n#...\n#...\n#...\n\n.#..\n.#..\n.#..\n.#..\n\n###.\n..#.\n....\n....\n\n....\n....\n....\n####\n
这就是输出,其中包含随机无用的字符。
#...
#...
#...
#...
.#..
.#..
.#..
.#..
�P@��
###.
..#.
....
....
....
....
....
####
为什么会出现那些随机字符?
答案 0 :(得分:0)
实际上,如果我运行你的代码(使用\n
作为中断字符),它运行正常。
语言的记忆力很大(尽管没有伤害)。你可以这样做:
i = 0;
while (str[i] && str[i] != c) i++;
word = malloc(i + 1);
for (int j=0; j<i; j++) word[j]= str[j];
word[j] = '\0';