Linux学习之路(番外2)

两段代码和详解

A部分:

1    #include <stdio.h>
2
3 // 字符数组:每一个元素都是字符
4 // C语言中没有字符串类型,所谓字符串就是一个个字符的组合
5 //     ====> 可以将字符串存到字符数组里面
6 //     ====>  " "括起来的内容是字符串,每一个字符串都以'\0'结尾
7 // 字符数组和字符串是两回事情
8 // 字符串是一个常量,是不能变的 ===> 字符数组是一段空间,可以存字符
9 int main1()
10 {
11 // 1、字符数组初始化,可以按照普通数组的初始化方式初始化
12 char str1[10] = {'h', 'e', 'l', 'l', 'o'};
13
14 // 2、允许用字符串直接给字符数组初始化
15 char str2[10] = "hello"; // char str[10] = {'h', 'e', 'l', 'l', 'o', '\0'};
16 char str3[10] = {"hello"};
17
18 // 可以直接打印字符数组,字符数组被当做字符串处理
19 printf ("%s\n", str3);
20
21 // 可以直接对字符数组进行输入
22 scanf ("%s", str3);
23 printf ("%s\n", str3);
24 return 0;
25 }
26
27 int main2()
28 {
29
30 char str1[] = "hello\0world";
31 printf ("长度: %lu\n", sizeof(str1)/sizeof(char));
32 printf ("%s\n", str1);
33
34
35 return 0;
36 }
37
38 // 字符串本身代表该字符串的首个元素的地址
39 int main()
40 {
41
42 char str1[] = "hello\0world";
43 printf ("长度: %lu\n", sizeof(str1)/sizeof(char));
44 printf ("%s\n", str1);
45
46 char *p1 = "hello\0world";
47 char *p2 = str1;
48
49 printf ("字符串 : %p\n", p1);
50 printf ("字符数组 : %p\n", p2);
51
52 p2[1] = 'w'; // 允许,修改的是数组第2个元素
53 printf ("%s\n", p2);
54
55 // p1[2] = 'w';  // 不允许,修改的是字符串,字符串是常量,不能改
56
57 scanf ("%s", p2);
58 printf ("%s\n", p2);
59
60 char *p3; // 没有初始化的指针叫野指针,不能操作
61 // scanf ("%s", p3);   // p3没有指向一个有效的空间
62
63
64 char str2[5] = {'h', 'e', 'l', 'l', 'o'};
65 printf ("%s\n", str2);
66
67
68 return 0;
69 }

 

B部分:

1 #include <stdio.h>
2
3 int strLen(char *pStr)
4 {
5 if (pStr == NULL)
6 return -1;
7
8 int len = 0;
9 // while (*pStr != '\0')
10 // while (*pStr)
11 // {
12 // len++;
13 // pStr++;
14 // }
15
16
17
18 while(*(pStr++))
19 {
20 len++;
21 }
22
23 return len;
24 }
25
26 void reverse(char *pStr)
27 {
28 int left = 0;
29 int right = strLen(pStr)-1;
30
31 while (left<right)
32 {
33 char tmp = pStr[left];
34 pStr[left++] = pStr[right];
35 pStr[right--] = tmp;
36 }
37 }
38
39 int main()
40 {
41 char str[100] = "hello world";
42 int len = strLen(str);
43 printf ("len = %d\n", len);
44
45 reverse(str);
46 printf ("%s\n", str);
47 return 0;
48 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值