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解决了这个问题。
请参阅命令行的控制提示