C语言字符串反序输出

乱码,不知道为什么
#include<stdio.h>
#include<string.h>
void main()
{
int n,m,t;
m=0;
char i[100],o[100];
gets(i);
n=strlen(i);
while(n>0)
{
o[m]=i[n-1];
m++;
n--;
}
printf("%s\n",o);
}

数组定义完,没有初始化;系统会分配一段物理内存给数组,如果不初始化,就会打印出乱码,该段内存地址有可能之前被使用过。

char i[100]={0},o[100]= {0};

结果对比:

    未初始化数组 

 

 2.初始化数组

追问

后面加个'\0'也可以,能不能综合两个方法解释一下

追答

c/c++中规定字符串的结尾标志为'\0',在打印数组里面的元素时,遇到'\0'就结束了。
例如:上面定义的char i[100],即使你定义的数组占100个字节,输完abc后加'\0',打印也只会到此为止。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-18

在printf("%s\n",o);之前加上o[m]='\0';就好了

第2个回答  推荐于2017-10-05

库函数strrev可以将一个字符串直接反序输出,使用时要包含头文件string.h。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
int main(void){
    char s[]="1234567890abcdefghijklmnopqrstuvwxyz";
    printf("%s\n",strrev(s));
    return 0;
}

第3个回答  2013-07-18
呵呵 注意你的printf,printf("%s\n",o);printf的输出规则是遇见\0结束输出(记不太清了,应该是这样),可你直接是o,当定义0【100】时,系统会随机生成一个数据,当你的输出超过你输入的字符串的长度,会输出0【100】中的随机数据,所以会出现随机数据,也就是乱码
第4个回答  2013-07-18
#include<stdio.h>
#include<string.h>
void main()
{
int n,m,t;
m=0;
char i[100],o[100];
gets(i);
n=strlen(i);
while(n>0)
{
o[m]=i[n-1];
m++;
n--;
}
o[m]='\0';    //最后给字符串o加一个结束字符
printf("%s\n",o);
}

相似回答