关于C语言的问题字符串+1问题

//给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,
// 如aBf转换成bCg,字符串内的其他字符不改变,给定函数,
//编写函数 void Stringchang(const char*input,char*output) 其中input是输入字符串,output是输出字符串
#include
#include
void stringchang(const char*input,char*output)
{
for(int i=0;i<255;i++)
{
output[i]=input[i]+1;
switch(input[i])
{
case'z':output[i]='a';break;
case'Z':output[i]='A';break;
}
if(input[i]=='\0')
break;
}

}

void main()
{
char input[255];
char output[255];
gets(input);
stringchang(input,output);
puts(output);
}
为什么输出结果总是会乱码?
图片说明

修改后的代码:
#include

void stringchang(const char*input,char*output)
{
for(int i=0;i<255&&input[i]!='\0';i++)
{
output[i]=input[i]+1;
switch(input[i])
{
case'z':output[i]='a';break;
case'Z':output[i]='A';break;
}

}

}
void main()
{
char input[255]={'\0'};
char output[255]={'\0'};
gets(input);
stringchang(input,output);
puts(output);
}

你的 output 内存没有清零:你只是赋值了前三个,后面的是随机的数值,所以输出就是乱码。

当input[i] = '\0' 时, 你忘记了 output[i] ='\0'

其他字符,包括'\0‘都没有处理(原样照抄),这里只做了转换,所以就这样了

#include<stdio.h>
void wjj(const char *input,char *output)
{
int i;
for(i=0;i<255&&input!='\0';i++)
{
if((input[i]>='a'&&input[i]<='z')||(input[i]>='A'&&input[i]<='Z'))
{
output[i]=input[i]+1;
switch(input[i])
{
case'z':output[i]='a';break;
case'Z':output[i]='A';break;
}
}else
{
output[i]=input[i];
}
}
}

int main()
{
char input[255]={'\0'};
char output[255]={'\0'};
gets(input);
wjj(input,output);
puts(output);
return 0;
}