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

时间:2017-06-05 11:37:08

标签: c linux

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

我的代码:

#define szoveghosz 256
//....
char bemenet[szoveghosz]; 
fgets (bemenet,sizeof(bemenet),stdin);

1 个答案:

答案 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
 }

另见strchr(3)& memset(3)

但正如我评论的那样,在Linux和POSIX系统上,getline(3)更可取(因为它动态分配任意长的行)。请参阅this

请注意(原则上)文件名可以包含换行符(但在大多数情况下,您可以忘记这种可能性)。另见glob(3)& wordexp(3)glob(7)以及path_resolution(7)