空格将字符串分成不同的字符串?

时间:2013-07-21 15:49:56

标签: c string

如果我在scanf语句中提供字符串“Alice in wonder land”,那么下面代码的输出是什么(底部的代码)?我的书说输出应该是:

Alice
in
wonder
land

好吧,如果我将“Alice in wonder land”作为单个字符串提供,为什么这是输出?当我将“Alice in wonder land”作为单个字符串提供时,如何在“Alice”,“in”,“wonder”,“land”之间提供空格使它们成为单独的字符串?

#include<stdio.h>
void main()
{
    char s1[10], s2[10], s3[10], s4[10];
    scanf("%s%s%s%s", s1, s2, s3, s4);
    printf("\n%s\n%s\n%s\n%s", s1, s2, s3, s4);
    getch();
}

谢谢! :)

3 个答案:

答案 0 :(得分:1)

这就是scanf的工作原理。 %s格式说明符告诉scanf读取任何空格,包括任意数量的空格标签输入键并将其存储在相应的地址中。

来自man,%s转换规范,

  

匹配一系列非空白字符;下一个指针必须是指向字符数组的指针,该指针足够长以容纳输入序列和终止空字节('\ 0'),这是自动添加的。输入字符串在空格或最大字段宽度处停止,以先发生者为准

答案 1 :(得分:0)

来自scanf(3) man page

  

转换开始之前,大多数转化会跳过空格

  

s 匹配一系列非空白字符

答案 2 :(得分:-1)

您的图书版权。

当您从用户那里获得带有scanf的字符串时,当第一个spase,tab或enter位于输入中时,它将停止读取。其余的输入都留在缓冲区中。

这就是为什么你不应该使用scanf来读取字符串。您可以使用gets()函数 在第一次输入时停止,这意味着您可以在输入中包含空格或制表符。

我认为你还没有学习过FILES,所以它现在已经足够了。