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

C primer plus 学习笔记 第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()的参数读取这些参数,

C primer plus 学习笔记 第11章 字符串和字符串函数_初始化_02

 

 11.9 把字符串转换成数字

atoi()