1 字符串与字符数组
1.1 字符数组定义
char array[100]; |
1.2 字符数组初始化
char array[100] = {'a', 'b', 'c','d'}; |
char array[100] = "abcd"; |
char array[100] = { 0 }; |
char array[] = "abcd"; |
1.3 字符数组使用
1.4 随机数产生函数rand与srand
头文件stdlib.h
Rand是伪随机数产生器,每次调用rand产生的随机数是一样的
如果调用rand之前先调用srand就出现任意的随机数
只要能保证每次调用srand函数的时候,参数的值是不同的,那么rand函数就一定会产生不同的随机数
#include <time.h> int t = (int)time(NULL); srand(t); for (int i = 0; i < 10; i++) { printf("%d ", rand()); } |
|
1.5 用scanf输入字符串
char s[10] = { 0 }; scanf("%s", s);//"%s"的作用就是输入一个字符串的,scanf是以回车键作为输入完成标示的,但回车键本身并不会作为字符串的一部分 //如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃 int i; for (i = 0; i < 10; i++) { printf("%d ", s[i]); } printf("---------------------------------- "); printf("%s ", s); return 0; |
1.6 字符串的结束标志
Scanf将回车,空格都认为是字符串输入结束标志,
1.7 字符串处理函数
1.7.1 gets
char s[100] = { 0 }; gets(s);//gets认为回车的输入结束标示,空格不是输入结束标示,所以用gets这个函数就可以实现输入带空格的字符串 //gets和scanf一样存在缓冲区溢出的问题
int i; for (i = 0; i < 10; i++) { printf("%d ", s[i]); } printf("---------------------------------- "); printf("%s ", s); |
Gets不能用类似“%s”或者“%d”之类的字符转义,只能接受字符串的输入
1.7.2 fgets函数
gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,fgets函数改进了这个问题。
由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便
char s[100] = { 0 }; fgets(s, sizeof(s), stdin); |
1.7.3 puts函数
puts函数打印字符串,与printf不同,puts会在最后自动添加一个’ ’
char s[] = "hello world"; puts(s); |
1.7.4 fputs函数
fputs是puts的文件操作版本,
char s[] = "hello world"; fputs(s, stdout); |
1.7.5 strlen,字符串长度
size_t strlen(const char * _Str);
返回不包含字符串结尾’