fgets()函数无法接受来自命令提示符的消息

我正在尝试创建一个C程序,它提示用户从控制台键入消息,然后显示用户键入的消息,如下例所示:

C:>promptTest type your message >>>> test typed : test C:> 

这是我的代码:

 #include  #include  int main(){ char msg[32]; printf("type your message >>>>\t"); fgets(msg,sizeof(msg),stdin); msg[strlen(msg) - 1] = '\0'; printf("typed : %s\n",msg); return 0; } 

它可以在Windows7和CentOS上构建,并且可以像上面那样在Windows上正常运行。

但是,它无法在CentOS上运行。 我的意思是没有接受来自提示的任何消息,如下所示:

 $ ./promptTest type your message >>>> test typed : $ 

我怎样才能解决这个问题?

这是关于我的机器的信息。

 $ cat /etc/redhat-release CentOS release 6.4 (Final) $ $ arch x86_64 $ 

strlen()返回size_t而不是int

使用%d在64位IXish系统上打印size_t可能会失败,因为前者最喜欢的是64位,而后者需要32位。

所以至少在64位的IXish系统而不是

 printf("### buf(%d) = %s\n",strlen(buf),buf); printf("### message(%d) = %s\n",strlen(message),message); 

 printf("### buf(%zu) = %s\n",strlen(buf),buf); printf("### message(%zu) = %s\n",strlen(message),message); 

作为(丑陋的)解决方法,您还可以将strlen()int

 printf("### buf(%d) = %s\n", (int) strlen(buf),buf); printf("### message(%d) = %s\n", (int) strlen(message),message); 

但是,这种解决方法假设没有字符串比INT_MAX

我找到了解决方案。

CL + LF解决了这个问题。

请参阅命令行的控制提示