これはmy last questionの続きです。C - strtokを使用して文字列の配列を文字配列に分割する
これまでのところ、私はユーザー入力に成功し、文字列に格納しました。この中へ
1:E 2:B 2:B 2:B 4:G
:文字列の配列です 1:E
2:B
2:B
2:B
4:G
例えば、私はこれを回しました。
これは私が次の何をしたいのかですが、それは私のために働いていない: 1
E
2
B
2
B
2
B
4
G
そして、これらの各文字の配列に格納されている文字になります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_INPUT_SIZE ((sizeof(char)*96) + (sizeof(int)*48))
int main() {
char *input = malloc(MAX_INPUT_SIZE);
printf("Example input: 1:E 2:C 2:C 2:C 8:D\n");
printf("Your input:\n\n");
fgets(input, MAX_INPUT_SIZE, stdin);
// Removing newline
if ((strlen(input) > 0) && (input[strlen(input) - 1] == '\n'))
input[strlen(input) - 1] = '\0';
int i = 0;
char *p = strtok(input, " ");
char *array[MAX_PAIRS];
while (p != NULL){
array[i++] = p;
p = strtok(NULL, " ");
}
// Checking the array
int j = 0;
for (j=0; j<i; j++) {
printf("\n %s", array[j]);
}
そして、このコードはうまく動作します:ここで
は、私が正しく動作して持っているコードの塊です。次の私は現在で働いているコードは次のとおりです。
int k = 0;
int l = 0;
char *letter = malloc(sizeof(char) * (i * 2));
for (k=0; k<i; k++) {
char *q = strtok(array[k], ":");
while (q != NULL) {
letter[l++] = q;
q = strtok(NULL, ":");
}
}
// Checking the array
int m = 0;
for (m=0; m<l; m++) {
printf("\n %c", letter[m]);
}
return 0;
}
私は、配列を確認するために行く、それは私が印刷したい各文字のごみ記号を出力します。私はここで間違ったことを理解していません。
'letter [l ++] = q;' - > 'letter [l ++] = * q;' – BLUEPIXY
@BLUEPIXYありがとうございます。しかし、私は以下の答えで言及したように、その背後にあるロジックがどのように機能するのかはまだ正確にはわかりませんが、今は私のコードがうまくいくので、私は満足しています。 –
'* q'はポインタが指す文字です。 – BLUEPIXY