【发布时间】:2014-09-23 19:10:00
【问题描述】:
我正在尝试编写一个解析函数,该函数调用另一个函数 getword(),它将给定的字符串分解为单词。调用 getword() 将提供给 getword 的字符串前进到下一个由空格分隔的单词。
void parse(char *s, char **p) {
int i = 0;
while(*s != -1 && *s != '&' && *s != '\n' && *s != ';' && *s != '\0') {
p[i] = s;
i++;
getword(s);
}
}
运行调用程序后,我想打印出数组 p 中的 char 指针指向的字符串。这是可能吗?
我试过了:
printf("%s\n", (**p));
在调用程序中,但它只打印出“(null)”。
编辑:
我在输入字符串“Hello World”后尝试使用以下循环:
for(i=0; i< MAXITEM; i++)
printf("%s\n", p[i]);
但程序返回:
"
(空)
(空)
(空)..."
两个空白换行符,然后是 98 个(空)。 “Hello”和“World”这两个词实际上是否存储在这两个空白换行符中,或者它们实际上没有存储在 **p 中?
【问题讨论】:
-
是的,这是可能的。写一个循环。
-
所以你有一个像
"foo\nbar&baz"这样的字符串,你想把它变成{ "foo", "bar", "baz" }?试试strtok_r()。而且我不明白您为什么要对照-1检查当前字符。 -
@n.m.我添加了一个 for 循环来循环并打印元素,但是在提示符下输入“Hello World”时,它返回 2 个换行符,然后返回 98 个(null)。 (MAXITEM = 100) 是 p[0] = "Hello" 和 p[1] = "World" 还是它们都保持空白?
-
@H2C03 我从另一个文件中复制并粘贴了循环条件并忘记更改它。
标签: c arrays pointers printing