在C中处理字符串输入
如果在使用字符数组之前需要声明它,那么如何声明一个字符数组,以便可以使用它来存储输入 e、 g.用户输入一个句子或一系列单词。如何存储该文件以便对其进行操作在C中处理字符串输入,c,char,user-input,C,Char,User Input,如果在使用字符数组之前需要声明它,那么如何声明一个字符数组,以便可以使用它来存储输入 e、 g.用户输入一个句子或一系列单词。如何存储该文件以便对其进行操作 正确的方法是什么,而不仅仅是声明一个足够大的数组来处理预期的输入?如果您谈论的是控制台输入,那么您别无选择,只能使用一个固定大小的缓冲区,并使用安全功能,不允许在缓冲区中存储超过固定大小 例如: char buff[1024]; fgets(buff, 1024, stdin); // to read from standard input
正确的方法是什么,而不仅仅是声明一个足够大的数组来处理预期的输入?如果您谈论的是控制台输入,那么您别无选择,只能使用一个固定大小的缓冲区,并使用安全功能,不允许在缓冲区中存储超过
固定大小
例如:
char buff[1024];
fgets(buff, 1024, stdin); // to read from standard input
您必须警告用户,超过1023个字符将被忽略
如果要访问用户输入的最后一个字符:
printf("%c", buff[strlen(buff)-1]);
通过缓冲区输入?(用户将其文本写入一定大小的缓冲区,当缓冲区已满时,程序使用realloc更改目标数组的大小)
(您需要使用char*而不是char[])我通常使用以下函数:
#include <stdio.h>
#include <string.h>
#define OK 0
#define NO_INPUT 1
#define TOO_LONG 2
static int getLine (char *prmpt, char *buff, size_t sz) {
int ch, extra;
// Get line with buffer overrun protection.
if (prmpt != NULL) {
printf ("%s", prmpt);
fflush (stdout);
}
if (fgets (buff, sz, stdin) == NULL)
return NO_INPUT;
// If it was too long, there'll be no newline. In that case, we flush
// to end of line so that excess doesn't affect the next call.
if (buff[strlen(buff)-1] != '\n') {
extra = 0;
while (((ch = getchar()) != '\n') && (ch != EOF))
extra = 1;
return (extra == 1) ? TOO_LONG : OK;
}
// Otherwise remove newline and give string back to caller.
buff[strlen(buff)-1] = '\0';
return OK;
}
以及一些示例运行:
pax> ./qq
Enter string> hi bob
OK [hi bob]
pax> ./qq
Enter string>
No input
pax> ./qq
Enter string> hi ho the merry oh
Input too long
(第二个正在输入CTRLD,文件的直接结尾)。谢谢。那么,如何访问这些字符呢?如果buff是1024,例如用户输入了一个10个字符的字符串,如果我想访问最后一个字符,我是否需要遍历数组以找到转义字符?如果我用指针呢?e、 g.字符*字;然后将word设置为来自scanf的输入。我如何访问角色?好的,谢谢。我不知道为什么我有这样的想法,所有的东西都需要用C语言自己写:)事实上,它们只会被特定的
fgets
忽略,当你回来做另一次读取时,它们仍然会坐在输入缓冲区中,有时很烦人:-)你通常可以检测到行是否比预期的长,然后getchar
,直到你读到一行新行。fgets应该用于接受用户输入而不是scanf吗?@alJaree:这取决于你想要什么。如果您只需要普通输入,fgets
。如果需要输入+解析,scanf
。不过,您应该使用scanf\u s(scanf的安全版本)。
pax> ./qq
Enter string> hi bob
OK [hi bob]
pax> ./qq
Enter string>
No input
pax> ./qq
Enter string> hi ho the merry oh
Input too long