C/C++ 字符串输入输出

来源:互联网 发布:福州南威软件java 编辑:程序博客网 时间:2024/06/04 18:46

http://blog.sina.com.cn/s/blog_72659b8f0100wh5x.html

一、C语言
(一)
#include<stdio.h>
void main()
{
char s[20];
scanf("%s",s);
printf("%s\n",s);
}
(二)
#include<stdio.h>
void main()
{
char s2[20];
gets(s2);
puts(s2);
}
注:下面测试中 a 与 b 一样
#include <stdio.h>
void main()
{
char a[5]={"abcd"}; //最后一位存储的是'\0'
puts(a);

char b[5];
b[0]='a';
b[1]='b';
b[2]='c';
b[3]='d';
b[4]='\0'; // '\0'的ASCII编码是 0
puts(b);
}
二、C++ 标准类库
(一)
#include <iostream>
#include <string>
using namespace std;
void main()
{
string str;  //C++类 对象;不能用scanf printf输入输出
cin>>str;
cout<<str<<endl;
return;
}
注:
(一)所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
       这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。
       // one.h
  class String { ... };
  // somelib.h
  class String { ... };
  如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。
  所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。

(二)<iostream>和<iostream.h>和格式不一样:
C++标准为了和以前的C++代码(伪标准库区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std,这样才能正确使用cout。
后缀为.h的头文件c++标准已经明确提出不支持了,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现。
(二)
#include <iostream>
using namespace std;
void main()
{
char a[20]; 
//C++标准库提供了专有的字符串类型string。必要时再用字符数组作为字符串,因为字符数组限定了输入字符串的长度
cin>>a;
cout<<a<<endl;
}


三、错误:
(一)
#include<stdio.h>
void main()
{
char *s;  
 //一个未初始化的,可存储char型地址的变量。
scanf("%s",s);
}
(二)
#include<stdio.h>
void main()
{
char s[20];
scanf("%s",s);
printf("%s\n",*s);
//*s相当于s[0],返回一个char型字符。
//正确: 
printf("%s\n",s);
}

四、很不合适的用法
#include<stdio.h>
void main()
{
char *a=new char();//只申请了存储一个char类型的空间,却用来存储一个字符串(尽管这样用没有错误)
scanf("%s",a);
printf("%s\n",a);
}


0 0
原创粉丝点击