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