C语言重学系列之字符串

字符串输入函数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:
在这里插入图片描述在这里插入图片描述在这里插入图片描述.png)

拓展:结构体大小如何计算

在这里插入图片描述在这里插入图片描述在这里插入图片描述
以下链接说明的比较清晰:C语言结构体大小计算

在这里插入图片描述

在这里插入图片描述来源:百度百科

参考文档:
《C Primer Plus》

猜你喜欢

转载自blog.csdn.net/yuuu_cheer/article/details/129033351
今日推荐