我需要读取一个文件名,但我希望我的代码用于名称包含空格。 如何从键盘读到行尾?
我的代码:
#define szoveghosz 256
//....
char bemenet[szoveghosz];
fgets (bemenet,sizeof(bemenet),stdin);
答案 0 :(得分:2)
仔细阅读 fgets(3)的文档(可能在您的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系统上,getline(3)更可取(因为它动态分配任意长的行)。请参阅this。
请注意(原则上)文件名可以包含换行符(但在大多数情况下,您可以忘记这种可能性)。另见glob(3)& wordexp(3)和glob(7)以及path_resolution(7)。