注册 登录
编程论坛 C++教室

输出问题

flyingzc 发布于 2010-04-14 22:04, 437 次点击
程序代码:
#include<iostream>
using namespace std;
int legth(char *str);
int main()
{
   char s;
   char *p;
   cin>>s;
   p=&s;
   cout<<legth(p);
return 0;
}
int legth(char *str)
{
  int i=0;
  while(*str++!=NULL)
   i++;
  return i;
}
为什么无论输入多少个字母都输出7呢,而且为什么char s能接受多个字符而不报错呢.
7 回复
#2
南国利剑2010-04-14 22:23
你用字符来接收一个字符串当然会出错了。改成这样就可以了。把s定义成一个较长的字符数组就可以了。
代码如下:

#include<iostream>
using namespace std;

int legth(char *str);

int main()
{
   char s[100];
   char *p;
   cin>>s;
   p=s;
   cout<<legth(p)<<endl;
return 0;
}

int legth(char *str)
{
  int i=0;
  while(*str++!=NULL)
        i++;
  return i;
}
#3
南国利剑2010-04-14 22:25
注意在输入的时候不要用空格和回车键分割单词。否则,接受到的就是空格和回车之前的字符串,后面的都没有正常接收。
#4
flyingzc2010-04-14 22:31
不会出错啊,一直输出7,我打一个字母也输出7.
#5
yyblackyy2010-04-15 11:47
其实楼主这题是偶然中的必然原因如下:
程序进入main时会保存进入时的ESP值,这个值一般是0X0012FFC0第一个变量的ESP值等于(ESP-4) 而指针是从第内存指向高内存的所以就产生了上述的问题
假设输入5 :那么变量一内存中的值等于35 CC CC CC C0 FF 12 00(红色为第一个变量的值,蓝色为程序进入main 时的ESP值,内存中是反写的)
当p=&s;时p指向第一个变量,而while(*str++!=NULL)为假时str==NULL,好那我们数一数好了35 CC CC CC C0 FF 12 00
                                                                                  1 2   3  4  5  6  7   明白了不

#6
南国利剑2010-04-15 16:08
回复 4楼 flyingzc
你用我的代码试后也是一直输出7吗?
我在我的环境中试过了啊,能够正常输出。
如果是那样的话,可能是你的环境有问题吧。
你再试试。
#7
南国利剑2010-04-15 16:12
回复 5楼 yyblackyy
你说的我不是很理解?
能不能说的清楚些。
像你这么说是不是出现这种情况是正常的了。
那岂不是乱套了。
或者干脆解释一下,怎么避免这种情况发生。
谢谢!!!!
#8
flyingzc2010-04-15 17:22
回复 4楼 flyingzc
请问esp是什么啊
1