C primer plus 学习笔记 第11章 字符串和字符串函数

简介: C primer plus 学习笔记 第11章 字符串和字符串函数

第11章 字符串和字符串函数

11.1 表示字符串和字符串I/O

11.1.1 在程序中定义字符串

1.字符串字面量

双引号括起来的内容 为字符串字面量 或称为字符串常量。

字符串常量属于静态(static)存储类别,如果在函数中使用字符串常量,在字符串只会被存储一次,在整个程序生命期内存在。

2.字符串数组和初始化

定义字符串数组:

const char m1[40] = "Limit youtself to one line's worth.";

可以省略数组大小,让编译器自动计算数组大小:

const char m2[] = "Limit youtself to one line's worth.";

使用指针表示法创建字符串:

const char* pt1 = "Something is pointing at me.";

3.数组和指针

初始化数组把静态存储区的字符串拷贝到数组中,初始化指针只把字符串的地址拷贝给指针。

4.数组和指针的区别

 

11.1.2 指针和字符串

const char * msg = "Don't be a fool!";

const char * copy;

copy = msg;

这里的复制是让copy指向msg指向的地址,而不是将字符串拷贝过来。

 

11.2 字符串输入

读入字符串:1.分配空间,2.用输入函数获取该字符串(存到之前分配的空间)。


11.2.1 分配空间

char * name;

scanf("%s", name);

在读入name时,name未初始化,所以会把数据存到不确定的地方。所以,不要写这种东西。

可以使用数组分配空间:

char name[81];

之后可以用读取字符串函数 (如scanf)  读字符串到name中。

11.2.2 gets()函数 //由于可能导致缓冲区溢出,产生安全问题。在C11标准中已经被废除

gets()  读取整行输入,直到遇到换行符,然后丢弃换行符。

puts() 用于显示字符串,并在末尾添加换行符。

#include<stdio.h>
#define STLEN 81
int main(void)
{
    char words[STLEN];
    puts("Enter a string,Please.");
    gets(words);
    printf("Yout string twice:\n");
    printf("%s\n",words);
    puts(words);
    puts("Done.");
    return 0;
}

11.2.3 gets()的替代品

1.fgets()函数

fgets()函数通过第2个参数(例如n)限制读入的字符数来解决溢出问题。

fgets()将读取n-1个字符或遇到第一个换行符为止。fgets()读到的换行会存在字符串中。

fgets()第3个函数指明要读入的文件。如果用stdin 可表示从键盘输入

 

通常与fputs()配对使用。fputs()第二个参数表示要写入的文件,如果是stdout,就是输出在显示器上。

 

2. gets_s() 函数

用第二个参数限制读入的字符数。

 

11.2.4 scanf()函数

 

11.3 字符串输出

put(字符串地址)

fput(字符串地址,文件)

printf()  //可以格式化输出

11.4 自定义输入/输出函数

可以利用getchar()和putchar()自定义函数来处理字符串。

11.5 字符串函数 string.h

strlen()  //获取字符串长度

strcat() //拼接字符串

strncat()//拼接n长度的字符串

strcmp()//比较字符串

strcpy()

strncpy() //复制字符串本身

11.6 字符串示例

11.7 ctype.h 字符函数  用于处理字符

11.8 命令行参数

使用命令行运行程序时可以在同一行添加参数

程序通过main()的参数读取这些参数,

 

11.9 把字符串转换成数字

atoi()

相关文章
|
1月前
|
存储 Kubernetes 应用服务中间件
Kubernetes权威指南-基础篇
Kubernetes(K8s)是Google开源的容器编排系统,源自Borg,现为CNCF旗舰项目。它自动化部署、扩展和管理容器化应用,提供服务发现、负载均衡、自我修复、配置管理等功能,是云原生时代的基础设施核心。
|
存储 SQL 分布式计算
浅谈MPP数据库-Vertica
用过这块数据库3年时间,很多功能非常强大,POC做了很多数据库,查询性能可以说是最好的,推荐一下
2969 2
|
Linux Python
必备收藏| centos7安装Python3并且将pip设置为Python3中的pip
必备收藏| centos7安装Python3并且将pip设置为Python3中的pip
563 0
|
安全 Shell 网络安全
设置 码云 SSH 推送和拉取代码
设置 码云 SSH 推送和拉取代码
474 0
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
554 3
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
Linux
centos之--目录权限配置
CentOS中,可以使用chmod命令来设置文件夹的权限
746 0
|
安全 Unix Linux
samba 配置文件解析
【8月更文挑战第8天】Samba是一款开源软件套件,支持不同操作系统间的文件与打印机共享。它通过实现SMB/CIFS协议,确保了Linux/UNIX系统与Windows系统的互操作性。Samba具备文件共享、打印机管理、安全性设置及域控制器等功能,适用于搭建文件服务器、打印服务器及身份验证服务,并促进跨平台的数据访问与协作。其配置灵活,可根据需要调整共享目录的权限、可见性及用户认证方式。
302 3
|
存储 安全 数据安全/隐私保护
配置本地安全策略(一)
配置本地安全策略(一)
424 0
|
运维 Cloud Native 数据可视化
祝贺!极氪登陆纽交所,阿里云提供支持
祝贺!极氪登陆纽交所,阿里云提供支持
295 2
|
缓存 边缘计算 负载均衡
如何理解CDN?说说实现原理?
CDN(内容分发网络)是提升网络访问速度的关键技术,通过在全球或全国范围内设立边缘服务器,将内容缓存到靠近用户的地方。当用户访问网站时,DNS返回CNAME,引导用户连接到最近的CDN节点,而非直接到源站。CDN的负载均衡系统依据用户位置、运营商、节点负载等因素选择最佳边缘节点提供服务,而缓存系统则存储常用资源以提高命中率,减少回源请求。高命中率使得CDN能显著提高网站性能,降低网络拥塞。
3829 0