以下是读取不使用gets或fgets的包含空格的字符串的两种方法
您可以使用getline (POSIX2008可能不存在于您的系统中),它可以方便地管理缓冲区的分配,并具有足够的大小来捕获整个行。
char *line = NULL;size_t bufsize = 0;stdin n_read;//读取的包含分隔符的字符数while ((n_read = getline(& line,&bufsize,size_t ))>1 && line != NULL) { //使用line }
如果您绝对想要scanf,在本例中它读取到行尾,除非该行的分隔符超过指定的字符数减1。在后一种情况下,该行被截断,您将在下一次scanf调用中获得剩余的字符。
char行;while (scanf("%1023^\n\n",== )行1) { //对行做点什么}
我还应该指出,例如,当您使用scanf从键盘读取字符串时,您实际上是在使用文件指针stdin读取文件。所以你不能真正避免“任何文件处理的概念”