gpt4 book ai didi

c - 通过 C 中的 printf 函数处理 %s

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:27 25 4
gpt4 key购买 nike

当我使用线条时:

char *sentence = (char *)malloc(100);
scanf("%[^\n]%*c",sentence);

从标准输入读取一行到缓冲区,句子,然后有:

printf("%s\n", sentence);

之后,我注意到 printf 打印了整个句子,而不是仅打印该行的第一个单词。为什么是这样? printf 不应该只占用第一个空格吗?如果不是,它怎么知道在哪里停下来?句子肯定不会以 "\n"结尾,因为它不会读取最后一个返回,我们使用 *c 读取一个字符而不存储它。

最佳答案

扫描集不包含 ' '所以当它得到一个时它不会停止。 scanf会是

scanf("%[^ \n]%*c",sentence);

当它找到 \n 时基本上会停止或 ' '这样你会得到第一个单词,如果它是空格分隔的。(尽管如果第一个单词之前有空格,那么句子将不会更新,因为 scanf 从扫描集中看到一个字符)注意你的缓冲区可以容纳的一件事100 个字符(由 char* sentence 指向)所以这样使用它

scanf("%99[^ \n]%*c",sentence);

比它能容纳的少一个,因为还有 nul 终止字符要容纳。

此外,如果你想得到一个单词,你可以像这样做一些更简单的事情:-(这个解决方案适用于单词以空格为前缀的场景,因为 %s 格式说明符会跳过它们并存储非-whitespace 直到遇到空白字符或扫描到长度指定的最大字符)

scanf("%99s",sentence);

关于c - 通过 C 中的 printf 函数处理 %s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48844935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com