C 问题:将密码字符串:I am Tomato的每个字符向后移动一位变成J bn Upnbup,请看我的程序,结果错误

[复制链接]
查看11 | 回复3 | 2011-3-19 12:57:37 | 显示全部楼层 |阅读模式
编译没有错误,但是结果不对。是哪里错了呢?
#includeiostream.h

//函数原型声明
int transform(char code[]);
int restore(char code[]);


int main()
{
int i;
char judge;
char code[]={\'I\',\' \',\'a\',\'m\',\' \',\'T\',\'o\',\'m\',\'a\',\'t\',\'o\'};
transform(code);
for(i=0;isizeof(code);i)
{
coutcode;
}
cout\"是否回复出原密码?\"endl\"Y/N\"endl;

cinjudge;
if(judge==89||judge==121)
{
restore(code);
for(i=0;isizeof(code);i)
{

coutcode;
}
}
else{}
return 0;
}

//变换密码函数,功能是将传递的数组中的每个除空格外的字符都向后移动一位
int transform(char code[])
{
int i;
for(i=0;isizeof(code);i)
{
if(code==\' \')
{}
else
code=code 1;
}
return 0;
}

//将变换后的密码变回原密码
int restore(char code[])
{

int i;
for(i=0;isizeof(code);i)
{
if(code==\' \')
{}
else
code=code-1;
}
return 0;
}



我的结果是J bn Tomato
回复

使用道具 举报

千问 | 2011-3-19 12:57:37 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">在c的函数里面,如果把一个数组作为参数传进去,那么这个数组就会退化为一个指针,因而就不知道这个数组的长度(这里的数组指的是静态的而不是new出来的)。你的transform函数体里面对数组求sizeof得到的结果只会是char*的长度(4),所以只能读4位。可能这也是以前多数函数都在传数组的同时传入其大小作为参数的原因吧。











参考资料:<span class=\"gray\"><a href=\"http://lluweimin.blog.163.com/blog/static/1214106682009913114310164/\" target=\"_blank\">http://lluweimin.blog.163.com/blog/static/1214106682009913114310164/</a></span>
回复

使用道具 举报

千问 | 2011-3-19 12:57:37 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-2015625\">呵呵,你太强了,这么快就找出问题来了,呵呵我才刚开始学
哦还能在问个问题吗:
我刚刚仅仅是先用size=sizeof(char),然后把size变量传进变换和反变换函数,用size替换了原来函数中sizeof(char)的地方,但是这两个值是一样的啊,为什么这样一改正结果会不一样呢?
回复

使用道具 举报

千问 | 2011-3-19 12:57:37 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-2016228\">不一样。你这次的sizeof不是对函数参数里的数组取长度,而是已经确定长度的静态数组取长度。
你可以在你原来错误的代码内,分别在main函数里和transform函数里打印输出sizeof(数组),分别看下结果就知道了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行