我有点困惑,主要在这里:
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]);
在主函数中,当我打印symbols中的3个字符串时,输出结果如下:
0. '111'
1. '010'
2. ' s'
但是,当我取消parseSymbols中最后两行的注释时,会出现以下情况:
0. '111'
1. '010'
2. '101'
为什么FOOBAR块“修复”了我的字符串数组,更重要的是,我如何让parseSymbols正常工作而不必打印任何东西?symbols[2]是否需要使用'\0'结束?(但是strtok难道不是为我做这个吗?)