gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:37:42 29 4
gpt4 key购买 nike

我正在尝试制作一个 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
$

最佳答案

strlen() 返回 size_t 而不是 int

在 64 位 IXish 系统上使用 %d 打印 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 更长。

关于c - fgets() 函数无法接受来自命令提示符的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22317665/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com