一、C语言
(一)
1 #include<stdio.h>
2 void main()
3 {
4 char s[20];
5 scanf("%s",s);
6 printf("%s\n",s);
7 }
(二)
1 #include<stdio.h>
2 void main()
3 {
4 char s2[20];
5 gets(s2);
6 puts(s2);
7 }
注:下面测试中 a 与 b 一样
1 #include <stdio.h>
2 void main()
3 {
4 char a[5]={"abcd"}; //最后一位存储的是'\0'
5 puts(a);
6 char b[5];
7 b[0]='a';
8 b[1]='b';
9 b[2]='c';
10 b[3]='d';
11 b[4]='\0'; // '\0'的ASCII编码是 0
12 puts(b);
13 }
二、C++ 标准类库
(一)
1 #include <iostream>
2 #include <string>
3 using namespace std;
4 void main()
5 {
6 string str; //C++类 对象;不能用scanf printf输入输出
7 cin>>str;
8 cout<<str<<endl;
9 return;
10 }
注:
(1)所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。
// one.h
class String { ... };
// somelib.h
class String { ... };
如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。
所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。
(2)<iostream>和<iostream.h>和格式不一样:
C++标准为了和以前的C++代码(伪标准库)区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std,这样才能正确使用cout。
后缀为.h的头文件c++标准已经明确提出不支持了,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现。
(1)所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。
// one.h
class String { ... };
// somelib.h
class String { ... };
如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。
所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。
(2)<iostream>和<iostream.h>和格式不一样:
C++标准为了和以前的C++代码(伪标准库)区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std,这样才能正确使用cout。
后缀为.h的头文件c++标准已经明确提出不支持了,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现。
(二)
1 #include <iostream>
2 using namespace std;
3 void main()
4 {
5 char a[20];
6 //C++标准库提供了专有的字符串类型string。必要时再用字符数组作为字符串,因为字符数组限定了输入字符串的长度
7 cin>>a;
8 cout<<a<<endl;
9 }
三、错误:
(一)
1 #include<stdio.h>
2 void main()
3 {
4 char *s;
5 //一个未初始化的,可存储char型地址的变量。
6 scanf("%s",s);
7 }
(二)
1 #include<stdio.h>
2 void main()
3 {
4 char s[20];
5 scanf("%s",s);
6 printf("%s\n",*s);
7 //*s相当于s[0],返回一个char型字符。
8 //正确:
9 printf("%s\n",s);
10 }
四、很不合适的用法
1 #include<stdio.h>
2 void main()
3 {
4 char *a=new char();
5 //只申请了存储一个char类型的空间,却用来存储一个字符串(尽管这样用没有错误)
6 scanf("%s",a);
7 printf("%s\n",a);
8 }