小写变大写出现乱码
#include <iostream>
using namespace std;
void f(char p)
{
p++;
char &c=*p;
c+='A'-'a';
}
void main()
{
char str[]="abcde";
f(str+3);
cout<<str<<endl;
return 0;
}
void f(char p) // 改为void f(char *p)
f(str+3);//去掉
//改为:for(int i=0;i<sizeof(str);i++){f(str+i);}
return 0; //去掉此句。
实现结果:
ABCDE
但是实际运行却又乱码出现,我想要的结果就是小写变成大写的就行。怎么回事啊?
[解决办法]
1、把void f(char *p)中的p++去掉。
本身就是要操作当前指针,在操作前执行p++,让指针指向下一个char字符,那么当前的字符就被跳过了。
2、for循环中,终止条件改为i < sizeof(str) - 1
sizeof(str)在这里面是6,因为还包含了结尾的'\0',所以要-1,否则会造成数组越界,结果就是显示乱码。
另外,在c++的cctype库中有直接变换大小写的函数,代码如下:
for(int i=0;i<sizeof(str) - 1;++i) { str[i] = toupper(str[i]); }