C风格字符串是一个以NULL结束的char数组,不如标准库string使用方便快捷
也慢慢被弃置,但之前的很多代码仍使用了数组(而非容器)和C风格字符串,因此,研究也是必要的
今天试了两段程序
1:
#include <iostream>
using namespace std;
int main()
{
char s[10];
cin>>s;
cout<<s;
cout<<endl;
return 0;
}
输入一个字符串“abcdefg”后成功输出原串
在此直接调用标准I/O,竟然奏效(书中未提及)
又试了一下整型数组,却出现了问题
#include <iostream>
using namespace std;
int main()
{
int int_arr[10]/*={0,1,2,3,4};*/
cin>>int_arr;
cout<<int_arr;
cout<<endl;
return 0;
}P.S:/*注释段用于调试
编译显然失败,因为int_arr是一个指针,对指针的输入流在此显然无意义
把注释符去掉并在cin>>int_arr左右加上/*和*/使之无效(一种调试方法)
编译输出了一个int_arr的指针地址(随机数)而非整个数组
我的问题是:为什么之前一个程序成功编译了?
为何对字符数组,可直接令其头指针(数组名)接受整个串值?
又,用cout输出时,将该指针读入输出流竟能输出整个串,而非这个指针的地址?
另外,第一段程序编译时出现了一个奇怪的问题,输入超出数组大小的串(超出不大,一两个左右)
竟然没有出错,运行成功(输出了这个超出了的串),但超出到四五个时就会报错,这是什么原因?
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}