我在这里有点困惑。主要:
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
}
然后用户在一行上输入三个字符串符号,空格分隔:
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]);
}
回到 main,当我 printf 符号中的 3 个字符串时,我得到了这个:
0. '111'
1. '010'
2. ' s'
但是当我取消注释最后两行 parseSymbols 时,我得到:
0. '111'
1. '010'
2. '101'
为什么 FOOBAR 块“修复”我的字符串数组,更重要的是,我怎样才能让 parseSymbols 正常工作而不必在屏幕上打印一些东西?符号[2] 是否需要以 '\0' 结尾?(但是 strtok 不是为我做的吗?)