读取字符串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()/代码>。