(Q)字符串数组(C-style)与整型数组的标准输入输出区别?

      C++ Primer 2006-12-7 17:18

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输出时,将该指针读入输出流竟能输出整个串,而非这个指针的地址?

另外,第一段程序编译时出现了一个奇怪的问题,输入超出数组大小的串(超出不大,一两个左右)

竟然没有出错,运行成功(输出了这个超出了的串),但超出到四五个时就会报错,这是什么原因?

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}