
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501

第10章 字符串 10.1字符串常量 10.2如何字符串变量 10.3字符串的输入输出 10.4字符指针与字符串 10.5字符串处理函数 10.6程序举例 恩
10.1 字符串常量 10.2 如何字符串变量 10.3 字符串的输入输出 10.4 字符指针与字符串 10.5 字符串处理函数 10.6 程序举例 第10章 字符串

字符指针变量与字符串一P225 1、用数组实现字符串的访问 st st[O] 例: st[1] ①#include 〈stdio.h> 1 st[2] ②int main() 0 st[3] ③ { V st[4] ④ char st[]="I love China!"; e st[5] ⑤ printf("%s n",st);I love China! st[6] st+7 ⑥ printf("%s\n",st+7); C st[7] China! ⑦ h st[8] return 0; st[9] ⑧} n st[10] a st11] st12) 0 st[13]
字符指针变量与字符串—P225 1、用数组实现字符串的访问

字符串的处理指针变量与字符串 2、用它竺业仙中m 字持指针切始化:把字待串首地址赋给St 例: 等价于:char*st; ①#m st=“I love China!”; ②int main( ③{ 整体引用字符串 0 char *st ="I love China!" printf%sln”,st9ove e ⑥ China! st=st+7; C while (*st) *st!=0? h ⑧ 逐个字符引用 putchar (*st); n ⑩ st++; a ① China! return 0; ③}
2、用字符指针实现 字符串的处理-指针变量与字符串

例:输出字符串中,第10个字符后的所有字符。 ① #include ② int main() ③ char *p="this is a book"; ④ //p是指针变量,字符串首地址赋给ps ⑤ printf("%s\n",p);this is a book pp+10;//重新给指针变量ps的赋值 ① printf("号s\n",p)i book ② return 0; ③ } 注意:C语言允许给字符指针赋值字符串常量,因为字符串常量有确定的 地址。 例如, 以下代码是错误的: ①char*st;//字符指针st的值是随机数 ②gets(st)://错误-给随机数表示的地址存入信息 原因:指针变量s未初始化,s存储的是一个随机地址数据,程序无法正 常运行
例:输出字符串中,第10个字符后的所有字符。 ① #include ② int main() ③ { char *p="this is a book"; ④ //p是指针变量,字符串首地址赋给ps ⑤ printf("%s\n" ,p); • p=p+10;//重新给指针变量ps的赋值 ① printf("%s\n" ,p); ② return 0; ③ } 注意:C语言允许给字符指针赋值字符串常量,因为字符串常量有确定的 地址。 例如,以下代码是错误的: ① char *st;//字符指针st的值是随机数 ② gets(st);//错误-给随机数表示的地址存入信息 原因:指针变量st未初始化,st存储的是一个随机地址数据,程序无法正 常运行

3、指针变量使用注意事项 “野指针”操作: 如果一个指针没有指向一个有效内存就被引用,则被称为 “野指针”操作或空指针赋值。 野指针操作尽管编译时不会出错,但很容易引起程序运行 时表现异常,甚至导致系统崩溃。 例: ①char*ps,st[8]; ②scanf(“%s”,ps);∥错-野指针操作,ps没有指向有效内存 ③ps=st;1/对ps指向数组st所对应内存单元的首地址
3、指针变量使用注意事项 如果一个指针没有指向一个有效内存就被引用,则被称为 “野指针”操作或空指针赋值。 野指针操作尽管编译时不会出错,但很容易引起程序运行 时表现异常,甚至导致系统崩溃。 例: ①char *ps, st[8]; ② scanf (“%s” ,ps); //错-野指针操作,ps 没有指向有效内存 ③ ps = st; //对-ps指向数组st所对应内存单元的首地址

为什么“野指针”赋值会给程序运行带来极大的危险? 指针ps所占内存 随机值001 正好是系统程序区地址 ① char *ps; 001D ②*ps=“abc; 极其危险! 001 再次提醒: 指针变量只有与有效内存建立联系以后才可使用,否 则将造成程序远行异常,甚至导致系统死机! 西 值”abc” 恩 7/10
再次提醒: 指针变量只有与有效内存建立联系以后才可使用,否 则将造成程序运行异常,甚至导致系统死机! 7/10

指针变量、字苻串、字符数组—关系 例如:char*p,s[20]; ①p中可以存放字符串首地址。 s数组由若干元素组成,每个元素放一个字符。 ②p=“I love China!”;() ∥p是字符型指针变量,字符串常量在内存中有存储地址 s=“I love China!”;() ∥s是数组名一地址常量,不能改变 ③字符指针要p接受输入字符串时,必须先开辟存储空间。 例1:char s[10]; 例3:char*p,s10 scanf("%s",s);( p=s; 例2: char*p;lp的值无效 scanf("%s",p); scanf(%s”,p); (x-给无效地址输入值)
例如: char *p,s[20]; ① p中可以存放字符串首地址。 s数组由若干元素组成,每个元素放一个字符。 ② p=“I love China!”; () // p是字符型指针变量,字符串常量在内存中有存储地址 s=“I love China!”; () // s 是数组名—地址常量,不能改变 ③ 字符指针要p接受输入字符串时,必须先开辟存储空间。 指针变量、字符串、字符数组—关系

例:利用字符指针实现字符串的逆序 -执行过程演示 char s[201,ch,*p,*q; gets (s); 交换 h' C 0 p=s; q=p+strlen(s)-1
'I' ' ' 'L' 'o' 'v' 'e' ' ' 'C' 'h' 'i' 'n' 'a' '!' \0

例:利用字符指针实现字特串的逆序。 ①#include ②#include ③ int main ( ④ char s[20],ch,*p,*q; ⑥ gets(s;∥/读取一个字符串 ⑦ p=s; p指向字符串的首地址 ⑧ q=p+strlen(S)-1;lg指向字符串的末地址 while (p<q) ⑩ { ① ch=*p;*p=*q;*q=ch;交换p和q各自指向的字符 ② p+;q-;1移动指针 ③ 运行结果: ④ printf ("%s\n",s); ⑤ return 0; fecc力a ⑥