この質問を読む前に、私の質問は学校の割り当てに関係することに注意してください。この代入のために私たちが使用できるのはmalloc()だけです。他のすべては、他のライブラリを使用せずに行わなければなりません。文字列を空白で分割する
私は関数ft_split_whitespacesを呼び出しています。この関数は文字列を入力として取り、それを単語に「分割」します。言葉はスペース、タブ、改行で区切られています。例に関して
#include <stdio.h>
char **ft_split_whitespaces(char *str);
int main(void)
{
char *str = "what is";
char **test = ft_split_whitespaces(str);
}
各インデックスの結果上記
test[0] = "what"
test[1] = "is"
test[2] = NULL
しかし、私は、テストの結果[0]を印刷することができていなければなりません。他のすべてのインデックスは表示されません。関数の結果を出力するはずのコードの例を示します。
int i = 0;
while(test[i] != NULL)
{
printf("%s", test[i]);
i++;
}
コードのこの部分が実行されると、テスト[0]だけが出力に出力されます。私は何時間も自分のコードをデバッグしようとここに座っていました。誰かが余裕を持っていて、自分のコードを見ても気にならないなら、それは大変感謝しています。私はmallocをどのように使用しているかに問題があるかもしれないと感じていますが、それはまだわかりません。
#include <stdlib.h>
#include <stdio.h>
int count_whitespaces(char *str)
{
int space_count;
int i;
space_count = 0;
i = 0;
while(str[i] != '\0')
{
if(str[i] == ' ' || str[i] == 9 || str[i] == '\n')
{
if(str[i+1] != ' ' && str[i+1] != 9 && str[i+1] != '\n')
space_count++;
}
i++;
}
return (space_count);
}
int check_whitespace(char c)
{
if (c == ' ' || c == 9 || c == '\n' || c == '\0')
{
return (1);
}
else
return(0);
}
int count_characters(char *str, int i)
{
int char_count;
char_count = 0;
while(str[i])
{
if(str[i+1] != ' ' && str[i+1] != 9 && str[i+1] != '\n')
char_count++;
else
break;
i++;
}
return (char_count);
}
char **ft_split_whitespaces(char *str)
{
int i;
int j;
int k;
char **word;
int space;
i = 0;
j = 0;
k = 0;
word = (char**)malloc(sizeof(char*)*(count_whitespaces(str) + 2));
while(str[i] != '\0')
{
if (check_whitespace(str[i]) == 1)
i++;
else
{
if((word[j] = malloc(sizeof(char) * (count_characters(str, i) + 1))) == NULL)
return (NULL);
while (check_whitespace(str[i]) == 0)
{
word[j][k] = str[i];
i++;
k++;
}
j++;
}
}
j++;
word[j] = NULL;
j = 0
return word;
}
使用' 'のようになります。 – BLUEPIXY