读书人

新手求教~关于数组的有关问题

发布时间: 2012-10-17 10:25:46 作者: rapoo

新手求教~~~~关于数组的问题
今天随便写个代码,本以为没什么问题的,结果运行的时候发现一个诡异的现象,求高手指点

这是我写的代码,主要就是输入输出。。。。


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
char a[10];
cin>>a;
cout<<a<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}


问题出来了····为什么当我输入超过十个字符的时候,他给全部输出了???不是应该前十个的吗?
还有为什么我输入数字也可以给a?


另一个问题,是关于if的。
还是上面的代码,如果是判断a输入的是welcome,则输出什么什么的东西。。这块代码该怎么写?

我写的if(a==welcome)
cout<<a;
貌似不可以····


求高手,谢谢~~~~~~~~~~~~~~~~

[解决办法]
1、结束符'\0'也需要占用1个字节,所以a其实最多只能存储9个字符;
2、判断字符串是否相等要用strcmp函数。
[解决办法]
1、cin>>a,这里的a其实是指针。由于char *对<<和>>的重载,所以你这样没有问题,但是长度就无法控制了。多出的字符会存在a[10]之后的内存里,但是你对这部分地址没有操作权限,所以结果是未知的,虽然在这种简单的程序里可以正常输出,但是稍微复杂点的就可能会产生错误。
2、还是那个问题,a是指针,非string对象的字符串比较是否相等需要用到strcmp函数。


[解决办法]
1:结束符'\0'也需要占用1个字节,所以a其实最多只能存储9个字符
2:在控制台输入123给a 时,编译器自动将其转换为字符串“123”;
3:if( 0 == strcmp( "welcom",a)) //strcmp用于比较c风格字符串是否相等-- 相等返回0
{
cout<<a;
}
[解决办法]
1. cin哪知道你的a有多大的空间呀,
2. welcome又不是变量,也不是标示符,你连编译都通过不了.
3. 比较只能发生在数值类型的变量上,字符串最好用strcmp、strncmp,内存比较可以用memcmp
4. 浮点型比较时最好用范围,不用确定的某个值

读书人网 >C++

热点推荐