- 无限循环
(1)for(;;){}
(2)while(1){}
(3)out:
goto out;
- 输入输出的问题
int a[5]={1,2,3,4}; //整数数组不会自带’\0’
char a[5]={‘H’,’e’,’l’,’l’,’0’}; //字符数组这样定义没有’\0’
char a[5]={‘H’,’e’,’l’,’l’,’0’,’\0’};//正确写法末尾加’\0’
char a[]={“Hello”}; //字符数组这样定义会有’\0’
注意scanf()输入遇空格就会默认字符串结束
gets()输入只有遇回车才会认为字符串结束
综上结论:
- scanf()输出a[5]={‘H’,’e’,’l’,’l’,’0’},由于后面没有’\0’所以可能一直结束不了,出现乱码
- scanf()输出char a[]={“Hello”},后面有’\0’,所以不会乱码
- puts()与scanf()一样,遇’\0’才停止
3.字符串常用函数
#include <string.h>
- 求字符串长度的函数strlen 即(找到’\0’为止)
返值:返回字符串实际长度,不包括‘\0’在内
例子:对于以下字符串,strlen(s)的值为:
- char s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};
‘\0’截至,所以长度1
- char s[ ]=“\t\v\\\0will\n”;
‘\0’截至,所以长度3
- char s[ ]=“\x69\141\n”;
\xhh表示十六进制数代表的符号
\ddd表示8进制的
\x69一个,\141两个,\n三个,所以长度3
4) char aa[10];
printf("%d",strlen(aa));
不赋值的话一直在寻找’\0’,所以随机值
- 字符串拷贝函数strcpy
格式:strcpy(字符数组1,字符串2)
功能:将字符串2,拷贝到字符数组1中去
返值:返回字符数组1的首地址
说明:
1)字符数组1必须足够大
‚ 2)拷贝时‘\0’一同拷贝
- 字符串连接函数strcat
格式:strcat(字符数组1,字符数组2)
功能:把字符数组2连到字符数组1后面
返值:返回字符数组1的首地址
说明:
1)字符数组1必须足够大
2)连接前,两串均以‘\0’结束;连接后,串1的’\0’取消,新串最后加‘\0’(所以注意字符串a[5]={‘H’,’e’,’l’,’l’,’0’}没有’\0’问题)
(4)字符串比较函数strcmp(字符串1,字符串2)
(ASCII码)从左到右对比
a. 若字符串1< 字符串2, 返回负整数
b. 若字符串1> 字符串2, 返回正整数
c. 若字符串1== 字符串2, 返回零
(5)补充函数
strncpy(p, p1, n) 复制指定长度字符串
strncat(p, p1, n) 附加指定长度字符串
strcasecmp忽略大小写比较字符串
strncmp(p, p1, n) 比较指定长度字符串
strchr(p, c) 在字符串中查找指定字符
strstr(p, p1) 查找字符串
- 补充函数
#include<ctype.h>
isalpha() 检查是否为字母字符
isupper() 检查是否为大写字母字符
islower() 检查是否为小写字母字符
isdigit() 检查是否为数字