//string.c 字符串函数
1.strlen()函数-统计字符串长度;
返回值为 unsigned int;
char *string;
strlen(string);
2.strcat()函数-拼接两个字符串,类型char *;
char *strcat(char *restrict s1,const char *restrict s2);
该函数把s2指向的字符串拷贝至s1指向的字符串末尾。s2字符串
的第一个字符将覆盖s1字符串末尾的空字符,该函数返回s1。
char flower[10] = "Rose";
char addon[] = "s smell like old shose."
strcat(flower,addon);
缺点:无法检查第一个数组能否容纳第二个数组;
3.strncat()函数-strcat()升级版;
char *strncat(char *restrict s1,const char *restrict s2,size_t n);
该函数把s2指向的字符串的n个字符拷贝至s1指向的字符串末尾。s2字符串
的第一个字符将覆盖s1字符串末尾的空字符,不会拷贝s2字符串中空字符和
后面的字符,并在拷贝字符的末尾添加一个空字符,该函数返回s1。
char flower[10] = "Rose";
char addon[] = "s smell like old shose."
int size = 13;
strncat(flower,addon,size);//size指定了最大添加参数;
在加入第13个字符或遇到'\0'时停止;
4.strcmp()函数-俩字符串作比较;
int strcmp(const char *s1,const char *2);
若俩字符串参数相同,函数返回0,
否则返回非零值;若比较的字符串不同:
strcmp("A","A") is 0
strcmp("A","B") is -1
strcmp("B","A") is 1
strcmp("Z","a") is -1
strcmp("apples","apple") is 1
在字母表第一个字符串位于第二个字符串前面,返回负数;
反之,返回正数:(根据ASCII比较)
#define answer "Grant"
char try[size] = "Grant";
strcmp(answer,try);
5.strncmp()函数-可以比较第三个参数指定的字符数;
int strncmp(const char *s1,const char *s2,size_t n);
在比较n个字符后或者遇到'\0'停止比较。
const char *list = {"astronomy"};
strncmp(list,"astro",5)//只比较前五个字符;
6.strcpy()函数-拷贝字符串(包括空字符);
char *strcpy(char *restrict s1,const char *restrict s2);
返回类型为char *,第一个字符的地址s1;
char target[20];
strcpy(target,"Hi ho!");
缺点:不能检查目标空间是否容纳源字符串的副本;
7.strncpy()函数-更谨慎的选择;
char *strncpy(char *restrict s1,const char *restrict s2,size_t n);
返回类型为char *,第一个字符的地址s1;第三个参数指明可拷贝的最大字符数;
该函数不会拷贝空字符后面的字符,若源字符串的字符少于n个,目标字符串就
以拷贝的空字符结尾。若源字符串>=n个,不拷贝空字符。
char target[20];
strcpy(target,"Hi ho!",2);
8.strpbrk()函数
char *strpbrk(const char *s1,const char *s2);
若s1字符中包含s2字符串中的任意字符,该函数返
回指向s1字符串首地址的指针;若在s1中为找到s2
中的字符,则返回空字符。
9.strrchr()函数
char *strrchr(const char *s,int c);
该函数返回s字符串中c字符的最后一次出现的位置
(末尾的空字符也是字符串的一部分,所以在查找
范围内)。若没找到c字符返回空指针。
10.size_t strlen()函数
size_t strlen(const char *s);
该函数返回s字符串中的字符数,不包括末尾的空字符。
11.strstr()函数
char *strstr(const char *s1,const char *s2);
该函数返回指向s1字符串中s2字符串出现的首位置。
如果在s1中没有找到s2,返回空指针。
//字符串输入输出
1.gets()函数-读取整行输入,直到遇到换行符;
char *gets(char *str);
然后丢弃换行符,储存其与字符,并在末尾+'\0';
若读到文件结尾会返回空指针
缺点:无法检查数组是否能装得下输入行。
eg:读取一行输入,打印一行该输入。
char line[81];
while (gets(line)) //与while (gets(line) != NULL)相同
put(gets);
2.缓冲区溢出:多于的字符超出了指定的目标空间。
若这些多于字符只是占用了尚未使用的内存,就不会立即
出现问题,若它们擦写掉程序中其他数据,会导致程序异常中止。
3.puts()函数-显示字符串,并在末尾添加换行符;
int puts(const char *str);
执行成功返回非负数,执行失败返回EOF;
4.fgets()函数-显示字符串,
char *fegets(char *str,int n,FILE *stream);
从指定的流stream读取一行,存储在str所指向的
字符串内,当读取(n-1)个字符,或'\n'亦或到达
文件末尾停止。
返回地址与传入的第一个参数相同,但若读到文件
末尾或读取错误,返回空指针。
5.fputs()函数-向指定文件写入一个字符串;
不自动写入字符串结束标记'\0',成功写入一个字符串后,
文件的位置指针自动后移,函数返回值为非负整数;否则返回EOF。
fputs()会保留输入中的换行符。
int fuputs(char *string,FILE *stream);
eg:读取一行输入,打印一行该输入。
char line[81];
while (fgets(line,81,stdin))
fputs(line,stdout);
6.空字符与空指针
空字符('\0'):标记c字符串末尾的字符,对应字符
编码是0;由于其他字符的编码不可能是0,所以不可能
是字符串的一部分。
空指针(NULL)有一个值,该值不会与任何数据的有效
对应。通常,函数使用它返回一个有效地址表示某些特殊
情况发生,例如遇到文件末尾或者未能按期执行。
空字符是整数类型,占1字节;空指针是一个地址,通
常占4字节。
7.gets_s()函数
char *gets_s(char *str,int n);
gets_s()只从标准输入中读取数据;
gets_s()读到换行符,会丢弃它不储存它;
gets_s()读到最大字符数都没有读到换行符,会执行
以下几步。首先把目标数组中是首字符设置为空字符,
读取并丢弃随后的输入直到读到换行符或文件末尾,
然后返回空指针。接着,调用依赖实现的“处理函数”,
可能会中止或退出程序。
8.scanf()函数
int scanf(const char *restrict format,...);
scanf()返回成功读入的数据项数,读入数据时
遇到“文件结束”则返回EOF。
9.printf()函数
int printf(char *format...);
printf()返回值为实际控制输出的字符数。
//其他
sizeof()函数;
3057

被折叠的 条评论
为什么被折叠?



