请c语言高手看看下面这个程序哪里出错了,编译后怎么有一个警告

2025-05-17 17:22:50
推荐回答(3个)
回答(1):

问题在这儿:
strlen返回值的类型为unsigned int型的,
而你的代码里i为int型的,
所以编译就会产生一个隐式的强制类型转换的warning,
这么改就行了:
for(i=0;i改为:
for(i=0;i<(int)strlen(str);i++)

但你的代码还有一个问题:
就是在gets(str); 前没有将键盘缓冲区清空,所以有可能会造成gets(str)将上次用户输入n值时最后输入的回车,当作本次输入的字符串给读取了,
所以还要这么改一下:
str=(char*)malloc(n*sizeof(char));
fflush(stdin);//加上强制键盘缓冲区清空处理
gets(str);

所以完整的改过以后的代码如下:
#include
#include
#include
void main()
{
int i,n;
char *str;
printf("输入n并输入小于n个字符的字符串:\n");
scanf("%d",&n);
str=(char*)malloc(n*sizeof(char));
fflush(stdin);//
gets(str);
for(i=0;i<(int)strlen(str);i++)
{
if(str[i]>='a'&& str[i]<='z')
str[i]=str[i]-('a'-'A');
}
puts(str);
}

回答(2):

没有警告啊,也能得到正确答案。

回答(3):

什么警告?看不出有什么问题啊