字符串函数
字符串输入函数gets、fgets、scanf
char *gets(char *s);
读字符串直到遇到一个换行字符(\n),按回车键可以产生这个字符。它读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0)。它将读取换行符并将其丢弃,这样下一次读取就会在新的一行开始。
gets返回的指针和传递给它的是同一个指针。如果出错或遇到文件结尾,返回NULL。
char *fgets(char *s, int n, FILE *stream);
fgets与gets的不同:
- fegts的第二个参数说明最大读入字符数。fegts会读取最多n-1个字符或者读完一个换行符位置。
- 如果fgets读到换行符,会把它存到字符串里,而不是像gets那样丢弃它。
- fegts的第三个参数说明读哪个文件。从键盘上读数据时,可以用stdin。
int scanf(const char * restrict format,...);
如果使用%s格式,字符串读到(但不包括)下一个空白字符(比如空格、制表符和换行符)。如果指定了字段宽度,比如%10s,scanf会读入10个字符或直到遇到第一个空白字符。
返回值:返回成功读取的项目数。或者当遇到文件结束时返回一个EOF.。
如果scanf输入格式和设定的不匹配,会怎么样?
s 读入一个的字符序列,后面会加上空字节,遇到空白字符(\t \r \n 空格等)完成读取。(来源:百度百科)
Return Values
Both scanf and wscanf return the number of fields converted and assigned; the return value does not include fields that were read but not assigned.
A return value of 0 indicates that no fields were assigned.
The return value is EOF for an error or if the end-of-file character or the end-of-string character is encountered in the first attempt to read a character.(来源:scanf, wscanf (Windows CE 5.0))
你所输入的,通通都是字符串,scanf只是把字符串通过格式控制符转化给变量,比如我入一个1,这个1不是int,不是double,它只是一个字符。(来源:scanf()输入格式不匹配)
字符串输出函数puts、fputs、printf
int puts(const char *s);
puts显示字符串时自动在其后添加一个换行符。遇到空字符时停止。
双引号中的字符是字符串常量,并被看作地址。
int fputs(const char *str, FILE *stream);
fputs和puts的区别:
- fputs的地位个参数说明要写的文件。可以使用stdout作为参数来进行输出显示。
- fputs不为输出自动添加换行符
gets丢掉输入里的换行符,puts为输出添加换行符。
fegts存储输入中的换行符,fputs不为输出添加换行符。
// C99 前
int printf( const char *format, ... );
// C99 起
int printf( const char *restrict format, ... );
字符串连接函数:strcat、strncat
char *strcat(char *s1, const char *s2);
将第二个字符串的内容拷贝到第一个字符串的末尾(第一个字符串的\0位置)
返回值:第一个字符串的地址
char *strncat(char *s1, const char *s2, size_t n);
添加n个字符或遇到空字符为止。考虑到空字符占了一个字符,计算n最大值时要少1个字节。
字符串比较函数:strcmp、strncmp
int strcmp(const char *s1, const char *s2);
返回值:
两个字符串相同,返回0
第一个字符串ASCII码值大,则返回正数
第一个字符串ASCII码值小,则返回负数
int strcmp(const char *s1, const char *s2, size_t n);
字符串拷贝函数:strcpy、strncpy
char *strcpy(char *s1, const char *s2);
返回第一个字符串的值。
char *strncpy(char *s1, const char *s2, size_t n);
如果源字符串(s2)个数大于等于n,空字符则不会被复制。
字符查找函数strchr、strrchr、strpbrk
char *strchr(const char* s, int c);
返回一个指向字符串s中存放字符c的第一个位置的指针(标志结束的空字符是字符串的一部分,因此也一搜索它)。如果没有找到该字符,函数返回空指针。
char *strrchr(const char* s, int c);
返回一个指针,指向字符串s中字符c最后一次出现的地方(标志结束的空字符是字符串的一部分,因此也一搜索它)。如果没有找到该字符,函数返回空指针。
char *strpbrk(const char *s1, const char *s2);
该函数返回一个指针,指向字符串s1中存放s2字符串中的任何字符的第一个位置。如果没有找到任何字符,返回空指针。
字符串查找函数strstr
char *strstr(const char *s1, const char *s2);
该函数返回一个指针,指向s1字符串中第一次出现字符串s2的地方。如果没有找到,则返回空指针。
数字转字符串
来源:百度百科
拓展:
int sprintf(char *string, char *format [,argument,...]);
如果成功,则返回写入的字符总数,不包括追加在字符串末尾的空字符。
如果失败,则返回一个负数。
int snprintf(char* dest_str,size_t size,const char* format,...);
若成功则返回源字符串的长度(不包括\0),若出错则返回负值。
字符串长度函数strlen
函数原型:
来源:百度百科
strlen和sizeof的区别
sizeof:
拓展:结构体大小如何计算
以下链接说明的比较清晰:C语言结构体大小计算
来源:百度百科
参考文档:
《C Primer Plus》