请问,为什么运行结果会出现“tfosrm烫mrsoft”,程序什么地方有问题? 感激不尽...
运行结果:输出源字符串:mrsoft输出目标字符串:tfosrm烫mrsoftPressanykeytocontinue程序:#include<stdio.h>intma...
运行结果:
输出源字符串:mrsoft
输出目标字符串:tfosrm烫mrsoft
Press any key to continue
程序:
#include<stdio.h>
int main()
{
int i;
char String[7]={"mrsoft"};
char Reverse[7];
for(i=0;i<=5;i++)
{
Reverse[5-i]=String[i];
}
printf("输出源字符串:%s\n",String);
printf("输出目标字符串:%s\n",Reverse);
return 0;
} 展开
输出源字符串:mrsoft
输出目标字符串:tfosrm烫mrsoft
Press any key to continue
程序:
#include<stdio.h>
int main()
{
int i;
char String[7]={"mrsoft"};
char Reverse[7];
for(i=0;i<=5;i++)
{
Reverse[5-i]=String[i];
}
printf("输出源字符串:%s\n",String);
printf("输出目标字符串:%s\n",Reverse);
return 0;
} 展开
7个回答
展开全部
你的Reverse未初始化,而printf未检测到字符结束符,刚在栈空间上,与之相邻的变量String[]也是char,没有产生内存错误,而是直接读取了其内容。
所以你看到的输出是tfosrm烫mrsoft。
memset你的Reverse数组。应该就没有问题了。
不过为了让你清楚为什么,我还是说说变量在栈上的存储
你首先定义string[7] 假设 0x0ff7 或者 小端 0x0000
在定义Reverse[7] 假设 0x0ff0 0x0007
你应该明白,根据你的定义 计算机会为你申请不同的空间,而我们知道所有非malloc申请的空间都是栈空间,而栈空间一定是连续的。这下你明白,为何结果有误了吧,其实如果换个int double 我们就只能看计算机会不会报错了,有的会有的不会,所以变量在使用之前,一定要初始化。记住了吗?
所以你看到的输出是tfosrm烫mrsoft。
memset你的Reverse数组。应该就没有问题了。
不过为了让你清楚为什么,我还是说说变量在栈上的存储
你首先定义string[7] 假设 0x0ff7 或者 小端 0x0000
在定义Reverse[7] 假设 0x0ff0 0x0007
你应该明白,根据你的定义 计算机会为你申请不同的空间,而我们知道所有非malloc申请的空间都是栈空间,而栈空间一定是连续的。这下你明白,为何结果有误了吧,其实如果换个int double 我们就只能看计算机会不会报错了,有的会有的不会,所以变量在使用之前,一定要初始化。记住了吗?
展开全部
这个是字符未定义的问题,一般来说如果你用的是单个定义的字符串的话,字符结束部分是应该有个'\0'来做字符结束语的。但是你这里是char ,意思上相当于7个字符单独赋值和输出,而
String[7]={"mrsoft"};中"mrsoft"双引号内,别看只有6个字母,其实它是包含了字符结束符,也就是
'\0',而你的算法根本就不可能使得String[6]上面的字符结束符复制到Reverse[6]上面去,也就是说,你字母复制过去了,字符结束符并没有复制过去,这就照成了,Reverse[7]未定义,在编译后输出,就会输出烫这个字。
解决办法:在for 语句结束的地方加上Reverse[6]=String[6]; 那这样烫字就会消失。
String[7]={"mrsoft"};中"mrsoft"双引号内,别看只有6个字母,其实它是包含了字符结束符,也就是
'\0',而你的算法根本就不可能使得String[6]上面的字符结束符复制到Reverse[6]上面去,也就是说,你字母复制过去了,字符结束符并没有复制过去,这就照成了,Reverse[7]未定义,在编译后输出,就会输出烫这个字。
解决办法:在for 语句结束的地方加上Reverse[6]=String[6]; 那这样烫字就会消失。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的Reverse未初始化,而printf未检测到字符结束符,刚在栈空间上,与之相邻的变量String[]也是char,没有产生内存错误,而是直接读取了其内容。
所以你看到的输出是tfosrm烫mrsoft。
memset你的Reverse数组。应该就没有问题了。
所以你看到的输出是tfosrm烫mrsoft。
memset你的Reverse数组。应该就没有问题了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在for循环结束后,需要追加Reverse[6]='\0'这一句
因为作为字符串打印的时候,是根据'\0'作为字符串结束符的,如果没有,它会议一直向后打印,直到遇到'\0'为止
因为作为字符串打印的时候,是根据'\0'作为字符串结束符的,如果没有,它会议一直向后打印,直到遇到'\0'为止
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出目标字符串不是tfosrm是由于没有Reverse[6] = '\0'; 导致了继续输出寻找'\0',一直输出直到找到了String最后的'\0'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询