扫描C中包含空格的字符串

扫描C中包含空格的字符串,c,whitespace,scanf,C,Whitespace,Scanf,在我的代码中: scanf("%s", &text); printf("%s\n", text); 输入: hi how are you 输出: hi 而不是 hi how are you 我能做些什么来修复它呢?看看 函数的读取值最多为一 少于字符数 由给定流中的n指定 并将它们存储在字符串中 s、 换行时,阅读停止 在文件或文件末尾找到字符 错误。新行(如果有的话)是 保留。如果读取了任何字符 并且没有错误,一个“\0” 字符被追加到结尾 绳子 我想你在找 ssize_t g

在我的代码中:

scanf("%s", &text);
printf("%s\n", text);
输入:

hi how are you
输出:

hi
而不是

hi how are you
我能做些什么来修复它呢?

看看

函数的读取值最多为一 少于字符数 由给定流中的n指定 并将它们存储在字符串中 s、 换行时,阅读停止 在文件或文件末尾找到字符 错误。新行(如果有的话)是 保留。如果读取了任何字符 并且没有错误,一个“\0” 字符被追加到结尾 绳子


我想你在找

ssize_t getline(char **lineptr, size_t *n, FILE *stream);
它将最多读取一个换行分隔符。或者如果您正在使用其他分隔符

ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
用于获取您的输入:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    char text[80];
    fgets(text, sizeof(text), stdin);
    printf("%s\n", text);
}
#包括
#包括
内部主(空){
字符文本[80];
fgets(文本、尺寸(文本)、标准DIN);
printf(“%s\n”,文本);
}

仅在linux或其他使用GNU libc的系统上“getline()和getdelim()都是GNU扩展。它们从libc 4.6.27开始提供。”()@Paul;曾经是GNU扩展是的,现在是POSIX.1-2008的一部分。谢谢。我需要仔细阅读一下——它的实施范围有多广?