如何在C中读取包含空格的字符串?

时间:2010-10-26 16:20:58

标签: c string spaces

scanf(“%s”,str)不会这样做。它会在第一个空间停止阅读。 当字符串很大时,gets(str)也不起作用。有什么想法吗?

5 个答案:

答案 0 :(得分:13)

fgets与STDIN一起用作文件流。然后,您可以指定要读取的数据量以及放置位置。

答案 1 :(得分:3)

char str[100];

试试这个

 scanf("%[^\n]s",str);

或者

fgets(str, sizeof str, stdin))

答案 2 :(得分:2)

创建自己的函数来读取一行。这是你基本要做的事情:

1. fgets into allocated (growable) memory
2. if it was a full line you're done
3. grow the array
4. fgets more characters into the newly allocated memory
5. goto 2.

实施可能有点棘手: - )

你需要考虑你需要传递给你的函数(至少是数组的地址及其大小);当一切“有效”或出现错误时,函数返回什么。您需要确定什么是错误(字符串长度为10Gbytes,没有'\ n'错误?)。您需要决定如何增长阵列。


修改

实际上fgetc而不是fgets

可能会更好
get a character
it it EOF? DONE
add to array (update length), possible growing it (update size)
is it '\n'? DONE
repeat

答案 3 :(得分:1)

您想什么时候停止阅读?在EOF,特定角色,还是什么?

您可以使用%c

读取特定数量的字符
  

c匹配一系列宽度   count个字符(默认为1);下一个              指针必须是指向char的指针,并且必须有足够的空间              对于所有字符(不添加终止NUL)。通常              跳过前导空格被抑制。跳过空格              首先,使用格式的显式空格。

您可以使用%[

读取特定字符(或最多排除的字符)
  

[匹配一个非空的序列   来自指定集合的​​字符              接受的人物;下一个指针必须是指针   焦炭,              并且必须有足够的空间容纳所有角色   串,              加上一个终止的NUL字符。通常跳过领先   白色              空间被压制了。字符串由字符组成   在              (或不在)特定的一组;该集由定义   人物              在开括号之间[字符和一个小括号]   charac-              之三。如果是第一个,该集合将排除这些字符   字符              在开括号之后是一个旋风^。包括收盘价              在集合中括号,使其成为打开后的第一个字符              支架或旋风;任何其他位置将结束该集。              连字符 - 也很特别;放在两个之间              其他字符,它将所有插入的字符添加到集合中。              要包含连字符,请将其设为决赛前的最后一个字符              关闭括号。例如,`[^] 0-9-]'表示集合   ``一切              除了近括号,从零到九,以及连字符''。该   串              结束时出现的角色不在(或者,带有   西尔              cumflex,in)设置或当字段宽度用完时

答案 4 :(得分:1)

要读取带空格的字符串,您可以执行以下操作:

char name[30],ch;

i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);