Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取字符串char[]直到C行结束_C_Linux - Fatal编程技术网

读取字符串char[]直到C行结束

读取字符串char[]直到C行结束,c,linux,C,Linux,我需要读取一个文件名,但我希望用于名称的代码包含空格。 如何从键盘一直读到行尾 我的代码: #define szoveghosz 256 //.... char bemenet[szoveghosz]; fgets (bemenet,sizeof(bemenet),stdin); 仔细阅读的文档(可能在您的Linux计算机上通过man fgets本地提供) fgets()从流中最多读取一个小于大小的字符 并将它们存储到s指向的缓冲区中。阅读结束后停止 EOF或换行符。如果读取换行符,它将存储

我需要读取一个文件名,但我希望用于名称的代码包含空格。 如何从键盘一直读到行尾

我的代码:

#define szoveghosz 256
//....
char bemenet[szoveghosz]; 
fgets (bemenet,sizeof(bemenet),stdin);
仔细阅读的文档(可能在您的Linux计算机上通过
man fgets
本地提供)

fgets()
从流中最多读取一个小于大小的字符 并将它们存储到s指向的缓冲区中。阅读结束后停止
EOF
或换行符。如果读取换行符,它将存储到 缓冲器在最后一个字节之后存储终止的空字节(
'\0'
) 缓冲区中的字符

如文件所述,
fgets
将(在可能的情况下)保留换行符。您可能想删除它。所以我建议改为编码

 memset (bemenet, 0, sizeof(bemenet)); // clear the buffer
 if (fgets(bemenet, sizeof(bemenet), stdin)) {
    char *eol = strchr(bemenet, '\n');
    if (eol) 
       *eol = '\0';
    /// do appropriate things on bemenet
 }
另见,

但正如我所评论的,在Linux和POSIX系统上,它更可取(因为它是动态分配任意长的行)。看


请注意(原则上)文件名可以包含换行符(但在大多数情况下,您可能会忘记这种可能性)。另请参见&and.

请描述您的代码是如何被破坏的,即您得到了什么结果以及您期望得到什么(乍一看似乎还可以)。在您的代码中使用英语标识也会很有帮助。对于我来说,如果我想从键盘读取文本,它会保存在“bemenet”数组中,直到第一个空格。顺便说一句,带有
#define szoveghosz 256中的code>行您的代码不应编译。因此,删除该分号。fGET是正确的,假设您可以在最大可接受输入上加上一个相当小的(例如1000)。如果只针对符合POSIX.1-2008和以后的系统(例如,Linux,OK对于Windows,OK),请只考虑<代码> GETLINE()/代码>。