私はここで少し困惑しています。主に:
int main() {
char **symbols = (char **) malloc(3 * sizeof(char *)); // allocate 3 (char *)'s
for (int i = 0; i < 3; i++)
symbols[i] = (char *)malloc(3); // allocate string of length 3
}
次に、ユーザーは、スペースで区切られた 3 つの文字列記号を 1 行に入力します。
111 010 101
次に、このバッファリングされた文字列を次のように解析して文字列の配列にします。
void parseSymbols(char *line, int k, char **symbols) {
// k == 3
// Ignore leading spaces
while (*line != '\0' && is_whitespace(*line))
line++;
char *p = strtok(line, " ");
int cnt = 0;
symbols[cnt++] = p;
while (p) {
p = strtok(NULL, " \n");
symbols[cnt++] = p;
}
// Let's call this FOOBAR
//for (int i = 0; i < k; i++)
// printf("%d. %s\n", i, symbols[i]);
}
メインに戻ると、3 つの文字列をシンボルで printf すると、次のようになります。
0. '111'
1. '010'
2. ' s'
しかし、parseSymbols の最後の 2 行のコメントを外すと、次のようになります。
0. '111'
1. '010'
2. '101'
FOOBAR ブロックが文字列配列を「修正」するのはなぜですか? さらに重要なことに、何かを画面に出力することなく、parseSymbols を適切に機能させるにはどうすればよいですか? シンボル[2] は '\0' で終了する必要がありますか? (しかし、strtok は私のためにそれをしませんか?)