一、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 }