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

时间:2014-03-11 06:03:16

标签: c centos fgets

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

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

C:>

这是我的代码:

#include <stdio.h>
#include <string.h>
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
$ 

2 个答案:

答案 0 :(得分:0)

strlen()返回size_t而不是int

使用size_t在64位IXish系统上打印%d可能会失败,因为前者最有可能是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更长。

答案 1 :(得分:0)

我找到了解决方案。

CL + LF解决了这个问题。

请参阅Controlling prompt for command line