在C中处理字符串输入

在C中处理字符串输入,c,char,user-input,C,Char,User Input,如果在使用字符数组之前需要声明它,那么如何声明一个字符数组,以便可以使用它来存储输入 e、 g.用户输入一个句子或一系列单词。如何存储该文件以便对其进行操作 正确的方法是什么,而不仅仅是声明一个足够大的数组来处理预期的输入?如果您谈论的是控制台输入,那么您别无选择,只能使用一个固定大小的缓冲区,并使用安全功能,不允许在缓冲区中存储超过固定大小 例如: char buff[1024]; fgets(buff, 1024, stdin); // to read from standard input

如果在使用字符数组之前需要声明它,那么如何声明一个字符数组,以便可以使用它来存储输入

e、 g.用户输入一个句子或一系列单词。如何存储该文件以便对其进行操作


正确的方法是什么,而不仅仅是声明一个足够大的数组来处理预期的输入?

如果您谈论的是控制台输入,那么您别无选择,只能使用一个固定大小的缓冲区,并使用安全功能,不允许在缓冲区中存储超过
固定大小

例如:

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