• 字符串和字符串函数


    字符串表述和字符串I/O

    字符串常量

    字符串文字中间没与间隔或者间隔的是空格符,会自动串联起来

    char greeting[50]="hello""world" "!";
    

    字符串常量是指位于一对双引号中的任何字符,属于静态存储类,整个引号中的内容作为指向该字符串存储位置的指针,与数组名类似

    静态存储类:如果在一个函数中使用字符串常量,即使是多次调用了这个函数,该字符串在程序的整个运行过程中只存储一份

    字符数组及其初始化

    一定要以空字符标志结束,数组多出来的部分自动初始化为'',不是数值0

    数组与指针

    char m3[]="helloworld";//m3是常量
    const char *m3="helloworld";//m3是变量
    

    两种初始化方式不完全相同

    1. 数组形式:被引用的字符串存储在数据段部分,程序被加载到内存时,字符串也加载到内存。但是在程序运行之后才为数组分配存储空间,这时候才会将字符串复制到数组中,数组形式中数组名是个地址常量,不可以更改其值(++m3),只能用运算符m3+1指向下一个元素
    2. 指针形式:定义了一个指针变量,其值可变,存储字符串的地址

    用指针初始化时注意点:

    char *p1="helloworld";
    p1[0]='f';	//虽然可以,但是会导致内存错误
    

    因为指针变量中存储的是静态存储区的地址,相当于直接改变了静态存储区中的内容,这样会改变所有对该字符串的使用

    建议做法:初始化一个指向字符串常量的指针时使用const修饰符

    字符串数组

    char mytal_2[LIM][LINLIM];
    char *mytal[LIM];
    

    二维数组形式:字符串本身被存在数组中

    指针数组:每个数组元素存着字符串的地址

    字符串输入

    创建存储空间

    先建立一个空间以存放读入的字符串

    char *name;	//错误!未初始化
    
    char name[81];
    char *name=(char*)malloc(sizeof(char)*81);
    

    gets函数

    函数原型:

    char* gets(char *s){
    	...
    	return (s);
    }
    

    可见传入的是一个指向char的指针,返回的也是指向char的指针,实际上,返回的指针与传递给它的是同一个指针

    返回值有两种情况:如果一切顺利,返回的是读入字符串的地址,如果出错或者遇到文件的结尾,就返回空地址(NULL)

    fgets函数

    与gets三点不同:

    1. 需要第二个参数说明最大读入字符数
    2. 如果fgets读到换行符,就会把它存在字符串中,而gets直接丢弃,这也是fgets一个不足之处
    3. 需要第三个参数来说明读哪个文件(从键盘上读数据时,用stdin作为参数)

    scanf函数

    与gets的不同:

    1. 更基于获取单词,而不是获取字符串
    2. 用%s方式读取到下一个空白字符为止,gets会读到遇见第一个换行符
    3. 如果指定宽度,则最先满足的那一个终止输入

    如果指定宽度读取时未读完,则下一次调用从结束的地方读取,而不是从空白字符处开始

    字符串输出

    puts函数

    只需给出字符串参数地址

    puts遇到空字符时就会停下,并自动添加一个换行符

    fputs函数

    与puts的区别:

    1. 需要第二个参数来说明要写的文件
    2. 与puts不同,fputs不会自动添加换行符

    记住:gets和puts一起使用,fgets和fputs一起使用

    字符串函数

    strlen函数

    strcat函数

    strcat函数接受两个字符参数,将第二个字符的一份拷贝添加到第一个字符串的结尾,从而使第一个字符串成为一个新的组合字符串,第二个字符串并没有改变

  • 相关阅读:
    正则表达式$的一些用法
    基本类型数据转换(int,char,byte)
    IntelliJ Idea 2017 免费激活方法
    jrebel license server 激活方法
    linux 完全关闭tomcat
    spring data jpa自定义bean字段映射
    idea 启动调试模式总提示端口58346被占用问题
    java使用jsch连接linux
    福大软工 · BETA 版冲刺前准备(团队)
    Alpha 事后诸葛亮
  • 原文地址:https://www.cnblogs.com/xkf97/p/12461546.html
Copyright © 2020-2023  润新知