请大神帮忙纠正下一道C语言编程。是使用指针,编制程序,使字符串中的大写字母变为小写字母!!在线等!

#include <stdio.h>
#include <string.h>
void change(char *p)
{
int i;
for(i=0;i<strlen(p);i++)
if (p[i]<91 && p[i]>64)
p[i]=p[i]+32;
}
void main()
{
char *p;
gets(p);
change(p);
puts(p);
}

然后就出现2个warning。。
warning C4018: '<' : signed/unsigned mismatch
warning C4700: local variable 'p' used without having been initialized
可能是我在主函数里哪里弄错了。。可是我弄不来。。。请帮助。。谢谢!!在线等!!急!!

修改完毕,参照下面的中文注释,使用时请将中文注释内容删除,有问题可以追问。

#include <stdio.h>
#include <string.h>
void change(char *p)
{
int i;
for(i=0;(unsigned int)i<strlen(p);i++)/* strlen函数的返回值是unsigned int,与int这种有符号的类型比较,所以类型不匹配,对i进行类型强制转换即可 */
if (p[i]<91 && p[i]>64)
p[i]=p[i]+32;
}

void main()
{
char p[500] = {0};/* 只使用指针是不能进行字符串输入的,需要定义数组变量来存储输入的字符数据,具体长度限制自己来定 */
gets(p);
change(p);
puts(p);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-23
其实warning并无大碍,在main()函数里的char *p;应加一初始化数值char *p=null;这是第二个warning.
char型的数值和整型的91以及64作比较所以有第一个warning,把它们两种数中其中一种转换成相同的数据类型就行了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网