不要使用未初始化的指针型字符串 使用未初始化的字符指针字符串是严重错误 ■下列代码将引起未定义行为: char *p; p[g]='a'; 米*米米 WRONG ***/ p[1] /*米米 WRONG *米*/ p[2] I. /米米米 WRONG 米**/ p[3]=\0'; /*米米 WRONG *** 16
16 不要使用未初始化的指针型字符串 使用未初始化的字符指针字符串是严重错误 下列代码将引起未定义行为: char *p; p[0] = 'a'; /*** WRONG ***/ p[1] = 'b'; /*** WRONG ***/ p[2] = 'c'; /*** WRONG ***/ p[3] = '\0'; /*** WRONG ***/
用printf输出字符串 用%s作为转换规则可以使printf输出字符串: char str[]="Are we having fun yet?"; printf("%s\n",str); 此处由于未指定输出长度,printf会逐次输出直到碰 到空字符结束 ■ 可通过%.ps指定输出长度,p指明了输出的字符个数 printf("%.6s\n",str); 的输出为:Are we 17
17 用printf输出字符串 用%s作为转换规则可以使printf输出字符串: 此处由于未指定输出长度,printf会逐次输出直到碰 到空字符结束 可通过%.ps指定输出长度,p指明了输出的字符个数 的输出为:Are we char str[] = "Are we having fun yet?"; printf("%s\n" , str); printf("%.6s\n" , str);
用printf和puts输出字符串 转换规则%ms使得打印输出显示在m字符宽的一段空 间内 如果待打印字符串小于个字符,字符串会右对齐显 示,左侧不足m个字符串的部分留白 ■为了使其左对齐显示,需在m前面加一个负号 ■ m和p可以在转换规则中结合使用,%m.ps打印开始的 p个字符在宽度为m的区域内 更简单的输出字符串方式是puts函数:puts(str); puts函数的一个特点是会在每次调用结束后额外输出 一个换行符 18
18 用printf和puts输出字符串 转换规则%ms使得打印输出显示在m字符宽的一段空 间内 如果待打印字符串小于m个字符,字符串会右对齐显 示,左侧不足m个字符串的部分留白 为了使其左对齐显示,需在m前面加一个负号 m和p可以在转换规则中结合使用,%m.ps打印开始的 p个字符在宽度为m的区域内 更简单的输出字符串方式是puts函数: puts(str); puts函数的一个特点是会在每次调用结束后额外输出 一个换行符
使用scanf读取字符串 ■转换规则%s使得scanfi读入一个字符串到字符数组中: scanf("%s",str); ■ str如果是一个字符数组的话,其也可以被看作一个指 针,因此不需要再在前面加取地址操作符& 此处scanf_工作时,忽略掉空白符(空格、制表符、换 行符等),读入其它字符,直到再次遇到一个空白符 scanf总是为str的末尾补充一个空字符 scanfi读到换行符时会终止,所以通常不用scanf读入 完整的一行字符,而是用gets函数 19
19 使用scanf读取字符串 转换规则%s使得scanf读入一个字符串到字符数组中: str如果是一个字符数组的话,其也可以被看作一个指 针,因此不需要再在前面加取地址操作符& 此处scanf工作时,忽略掉空白符(空格、制表符、换 行符等),读入其它字符,直到再次遇到一个空白符 scanf总是为str的末尾补充一个空字符 scanf读到换行符时会终止,所以通常不用scanf读入 完整的一行字符,而是用gets函数 scanf("%s", str);