|
- #include <stdio.h>
- #include <string.h>
- /*
- 1.将用户名和密码 以字符串的 形式来实现
- */
- int main(void){
- // char name[32]; // 利用字符串数组名 保存字符串
- // char pwd[16];
-
- // printf("请输入用户名:");
- // scanf("%s",name); // 这里 不需要加入 & 号【原因 &name 表示的是变量name的地址, 而 name[32] 本身就是地址】
- // printf("请输入密 码:");
- // scanf("%s",pwd); // 注意了 这里是 s%
- // printf("您输入的用户名为:%s ; 您输入的密码是 %s\n", name, pwd);
-
-
-
-
-
-
- // int a[] = {2,4,7,8,6};
-
- // 这个计算 是利用内存, 且 数组的元素类型相同(内存相同), 计算出 数组中元素的个数
- // printf("数组占了 %d 个字节,一共有 %d 个元素", sizeof(a), sizeof(a)/sizeof(a[0]) );
-
-
-
-
- // 怎么合理的控制字符长度
- // char name[] = "laomo"; //这样会自动设置name长度 为 6 【为什么是6呢,因为字符串结束符也占一个字节 \0】
-
-
- // 再添加一个坑爹的字符串截取方式
- // name[3] = 0; // 相当于字符串结束符 '\0' 后面如果打印 就打印出来 lao 就这么坑
-
-
- // 使用 gets 输入字符
- // char name[34];
- // gets(name);
- // printf("胖爷输入的是:%s",name);
-
- // 使用 fgets 输入字符
- // char name[8];
- // fgets(name,8,stdin); // 参数:数组名 , 长度, 标准输入设备 【长度是8,最多读7个】 // 也可以 fgets(name,sizeof(name),stdin);
- // printf("胖爷输入的是:[%s]\n",name); // 有可能 回车符被读取了【输入数据 比 指定长度小】
- // 计算字符串的长度,strlen
- // char name[] = "laomo";
- // printf("name的长度是:%d",strlen(name)); //len = 5 恕我直言 这居然不包括 字符串结束符
- // 字符串的拷贝strcpy 特点:把原字符串的结束符 也拷贝到新字符串中
- // char name[43];
- // char key[32];
- // printf("请输入一个字符串:");
- // scanf("%s",&name);
- // strcpy(key,name); // 把 字符串name 拷贝到 字符串key 中
- // printf("key=%s",key);
-
- // char t[43] = name; // 这样写是不对的
- // printf("t的值是%s",t);
-
-
- // 字符串的拼接接 strcat
- char k[23]; // lao
- char b[42]; // mo
- printf("请输入一个字符串:");
- gets(k);
- printf("请再输入一个字符串:");
- gets(b);
-
- // strcat(k,b); 得出结论 拼接字符串后,原字符串已经更改掉了
- printf("拼接出来的字符串是:%s\n",strcat(k,b)); // laomo
- // 这个时候打印
- printf("此时k为:%s\n",k); // laomo
- printf("此时b为:%s\n",b); // mo
-
-
-
-
- return 0;
-
- }
- /*
- 字符串的讲解:
- 1.本质 字符串就是0个或者多个“字符”组成的有序序列 ;
-
- 2. 字符串长度 字符串包含的字符个数 ;
-
- 3. 字符串结束符
- 在C语言中,为了便于存储字符串,要求在最后一个字符的后面存储一个0(一个字节)。
- 这个0,称为“字符串结束符”,常用“ ”表示;
-
- 4.字符串常量
- 字符串常量,要求用"" 扩起来。 %s 用来匹配字符串 ; 必须是双引号
-
- 5.字符串的存储
- 在C语言中,字符串是以“字符数组”存储的。
-
- 6.字符串的输入
- scanf("%s", name); //数组名 与普通变量不同,它本身就表示一个地址;
- // scanf 输入时,遇到空格,就以为输入完了 很是尴尬 所以就有了以下几个
-
- 7.使用 gets 输入字符【 不读取回车符与换行符 】
- 特点: 1.能够读取 空格、制表符,但是不读取回车符 ; 2. 使用方便
- 缺点: 2.超过长度没啥卵事, 其实已经破坏了数组结构【在linux 下 会被警告 不安全】
-
- 8.使用 fgets 读取一行,直到遇到回车符 [缺点 : 有可能 回车符被读取了【输入数据 比 指定长度小】]
-
- 9. strlen(); // 计算字符串的长度
-
- 10.字符串的拷贝 strcpy 【是 覆盖式拷贝】strcpy(目标位置,源的位置,拷贝个数); 注意 拷贝个数 是个诡异的效果,前面拷贝后面不动 【拷贝个数不够时 拿0 来凑】
- 危险的地方: 容易越界
-
- 11.字符串链接 st
-
-
-
- 数组的讲解:
- 1.数组是多个元素的“组合”;
- 2.每个元素的数据类型,必须相同;
- 3.每个元素在数组中有一个“下标”,用来表示它在数组中的“序号”,下标从0 开始计算;
- 4.数组的“容量” 是不能改变的; 【就是说, 你定了32 他最多只能存32个元素】
-
- 数组的定义
- int a[8]; //定义了一个数组,数组名为 "a" ,包含8个元素,每个元素 都是int 类型的变量
- a[0]=20;
- a[1]=5; // 这样进行访问
-
- 数组的初始化 : 就是定义一个值 int a[4] ={1,3,5,6};
- 输出 printf("a[0]=%d,a[2]=%d",a[0],a[2]);
-
- 当数组初始化为 : a[8] ={0} ; 表示 a[0] =0,由于后面的元素 都没有设置 , 所以a[1]-a[7]都是0 ;
- 当数组初始化为 : a[8] ={1,2,3} ; 同上 前面是 1 2 3 后面全是0 ;
-
- 设定数组时,必须指定元素个数 , 如果没有 就是这样也行 : int a[] = {1,2,34,4}; 当知道指定元素时, 可以是省略
- 利用 sizeof(a) 算出数组内存,从而 算出数组长度
-
- 写几个语法错误1: int a[2];
- a = {1,2}; // 这样写法是错的, 不能对数组名直接赋值
-
- 2. int a[3];
- a[3] = 10 ; // 下标越界 !下标的范围是0,1,2 // 注意 这样写 访问的是 别的数据的内存
-
-
-
-
- */
复制代码
|
|