字符串:
(1).基础
C语言里所有文字信息必须记录在一组连续的字符类型存储区里
所有文字信息最后必须以'\0'字符作为结尾,这个字符的ASCII码是0
只有'\0'字符前面的部分被当做有效字符
所有字符都可以用字符指针表示
(2). 字符串字面值
字符串字面值,用双引号里面的一组字符表示,eg:"qwer"a
字符串字面值的内容在程序执行过程中不可以修改
(3).编译器对待字符串
编译器在编译的时候会自动在字符串的后面加'\0'字符
编译器会自动把字符串字面值替换成第一个字符存储区的地址
字符数组:
字符出租也可以表示字符串,数组元素为字符
只有包含'\0'的字符的字符数组,才可以用来表示字符串
可以采用字符串字面值对字符数组进行初始化
计算机会把字符串字面值里的'\0'字符复制到字符数组中去
字符数组里的字符串内容可以修改
可以使用%s做占位符把字符串的内容打印在屏幕上
字符标准函数
使用字符相关标准函数,需要#include <string.h>
strcat: 把一个字符串里的有效字符追加到另外一个字符串的末尾,这个函数有可能超过数组范围
strncat: 功能和strcat类似,多了一个参数用来表示最多可以追加多少个字符,可以避免超过数组范围
strcmp: 比较两个字符串的大小
strncmp: 只比较两个字符串的前n个字符
strcpy: 把一个字符串复制到一个字符数组里,这个函数也可以超过数组的范围,多了一个参数表示最多复制多少个字符
memset:把字符数组里多个存储区的内容,设置成某个字符
strstr:在一个字符串里查找另外一个字符串的位置,如果没有找到,则返回值是NULL
sprintf: 把多个数字按格式打印在字符数组里形成字符串
sscanf: 从字符串里获得多个数字并记录在变量里
atoi: 把字符串里的整数转换成整数类型
atof: 把字符串里的浮点数转换成浮点类型(用vi编辑有误)
以下代码有误:
strcmp 返回值是正数,负数和0.
键盘字符串记录到数组:
用scanf函数效果不好
用fgets函数可以把键盘得到字符串并记录到数组里,这个函数需要三个参数:
1.数组名称
2.数组里存储区个数
3.stdin表示键盘
如果输入内容不能充满数组,就会把用户最后输入的换行字符也读入到数组里
如果用户输入内容过多,则会把后面的部分留给下次读取
每次使用fgets函数从键盘得到字符串以后,都必须使用一个分支把可能存在的多余数据清理掉
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 /*
5 编写模拟登陆程序,正确的用户名是admin
6 正确的密码是123456,最多三次机会,最后给出提示
7 */
8 int main()
9 {
10 int num=0;
11 char str[10]={0};
12 for(num=0;num<3;num++)
13 {
14 printf("请输入用户名:");
15 fgets(str,10,stdin);
16 if(strlen(str)==9 && str[8]!='\n')
17 {
18 scanf("%*[%^\n]");
19 scanf("%*c");
20 }
21 printf("str1=%s\n",str);
22 if(strcmp(str,"admin\n"))
23 {
24 continue;
25 }
26 printf("请输入密码:");
27 fgets(str,10,stdin);
28 if(strlen(str)==9 && str[8]!='\n')
29 {
30 scanf("%*[%^\n]");
31 scanf("%*c");
32 }
33 printf("str2=%s\n",str);
34 if(strcmp(str,"123456\n"))
35 continue;
36 break;
37 }
38 if(num<=2)
39 printf("登陆成功\n");
40 else
41 printf("登陆失败\n");
42 return 0;
43 }
44