【问题标题】:Is there a way to print strings pointed to by array of char pointers in C?有没有办法打印 C 中 char 指针数组指向的字符串?
【发布时间】: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&amp;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


【解决方案1】:
#define getword(s)  while (*s && *s != ' ') ++s; while (*s == ' ') *s++ = '\0'

【讨论】:

  • 我认为,当您为您的意图添加一些解释时,这对 OP 和更多访问者会更有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 2015-05-19
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多