读书人

C语言 新人指针有关问题

发布时间: 2013-11-15 22:28:15 作者: rapoo

C语言 新人求助指针问题!
//题目:用指针数组方式定义3个字符串,然后遍历个字符串,把里面的小写字母改 大写,大写字母改小写。
//编译环境:C-Free 5.0
#include<stdio.h>
int main()
{
char *t;
int i;
char *p[3]={"AbcDEfG","hIJKlmN","ZyxWVu"};
for(i=0;i<3;i++)
{
for(t=p[i];*t!='\0';t++)
{
if(*t>='A'&&*t<='Z')
*t=*t+32;
if(*t>='a'&&*t<='z')
*t=*t-32;
}
puts(p[0]);
puts(p[1]);
puts(p[2]);
}
}

一点运行就停止工作了。。找了很久不知道哪错了, 请教各位高手!谢谢! C语言
[解决办法]
改为char p[3][20]={"AbcDEfG","hIJKlmN","ZyxWVu"};即可;
char *p[3]={"AbcDEfG","hIJKlmN","ZyxWVu"};会成为常量指针,其内容不允许被修改。

引用:
//题目:用指针数组方式定义3个字符串,然后遍历个字符串,把里面的小写字母改 大写,大写字母改小写。
//编译环境:C-Free 5.0
#include<stdio.h>
int main()
{
char *t;
int i;
char *p[3]={"AbcDEfG","hIJKlmN","ZyxWVu"};
for(i=0;i<3;i++)
{
for(t=p[i];*t!='\0';t++)
{
if(*t>='A'&&*t<='Z')
*t=*t+32;
if(*t>='a'&&*t<='z')
*t=*t-32;
}
puts(p[0]);
puts(p[1]);
puts(p[2]);
}
}

一点运行就停止工作了。。找了很久不知道哪错了, 请教各位高手!谢谢!

[解决办法]
1 定义的常量指针数组,内容不可改,只可读!所以会引起内存会出错
2 里面的判断if条件不是并列关系,而是if elseif关系 ,不然换了以后,又会换回来的!

已经修改代码中的bug 看看

#include <stdlib.h>
#include<stdio.h>
int main()
{
char *t;
int i;
char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};
for(i=0;i<3;i++)
{
puts(p[i]);
for(t = p[i];*t !='\0'; t++)
{
if(*t >= 'A' && *t<= 'Z')
{
*t=(*t) +32;
}
else if(*t>= 'a' && *t<='z')
{
*t=(*t) - 32;
}
}
puts(p[i]);
}
return 0;
}

读书人网 >C语言

热点推荐