相关讲解详见《C语言程序设计实用教程(Applied C: An Introduction and More)》,[美]Alice E. Fischer, David W. Eggert等著,裘岚、张晓芸等译,电子工业出版社,2001年9月第1版,第362页至363页。
先看第一个程序:
#include "stdio.h"
typedef char* string;
void main()
{
string sz = "Hi, Unice!";
printf("Input:/n");
scanf("%s", sz);//这样做有风险,尝试修改字符串"Hi, Unice!"中的字符值!!!
//不能在指针中存储输入字符串!!!
printf("%s/n", sz);
}
该程序尝试用指针存储输入字符串,试图改变已有字符串"Hi, Unice!"中的字符值,会发生错误!如果字符指针sz没有被初始化,那么输入语句scanf("%s", sz)则试图改变未知地址的存储值,相当危险!
可用如下程序进行改进:
#include "stdio.h"
typedef char* string;
void main()
{
char ca[100];
printf("Input:/n");
scanf("%s", ca);
printf("%s/n", ca);
}
该程序用数组存储输入字符串,数组已分配内存空间,并可以向其中赋值。
也可以按如下程序改进:
#include "stdio.h"
typedef char* string;
void main()
{
char ca[100];
string sz = ca;
printf("Input:/n");
scanf("%s", sz);
printf("%s/n", sz);
}
该程序中,字符指针sz获取字符数组的首地址,可以存储输入的字符串。