我正在尝试创建一个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
$
答案 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)