• C语言基础 (8) 常用字符串处理函数


    1. 复习

    如何调用库函数(别人写好的函数)

    1)       头文件:包含指定的头文件,头文件主要包含此函数的声明

    2)       函数名字:函数名字必须和头文件声明的名字一样

    字符串常用处理函数:

    1.字符串输入 gets() fgets()

     注意:

      虽然都是读一行,(即输入 后本次读取结束, 

          fgets会保留 ,读完后在最后加 

          gets读完后会将 替换成

    char buff[100]

    gets(buf) //和 scanf的区别是可以有空格

    // 最多只能输入99个

    fgets(buf,100,stdin);

    2.字符串的输出 puts() fputs()

    (第一个参数是指针 第二个参数是file,这里使用标准输出

    3.获取字符串长度: strlen (遇到就结束 sizeof不会!

    4.字符串拷贝: strcpy(直接拷贝 strncpy(多了一个长度

    5.字符串追加(连接): strcat() strncat()

    6.格式化输出字符串: printf() sprint()

    printf(“a = %d ”,10);

    “a = 10 ”;

    sprint(buf,…

    // 输出到字符数组buf中

    7.格式化输入字符串 scanf(“%d”,&a)

      char buf[] = “10”

      sscanf(buf,”%d”,&a

    8.字符串查询(需要使用返回值

    strchr()  // 查询字符

    strstr()  // 查询字符串

    9.字符串切割 strtok()

      strtok(buf,”,”) //切割的时候会把原字符串破坏

      strtok(NULL,”,”) //第二次切割的时候要把指针指向NULL,才能继续切割

    自定义函数

    02 作业讲解

    03 return和exit区别

    return的作用,终止函数

    1、  return主函数(main),程序结束

    2、  return其他函数,程序不结束

    //puts 和 printf的区别: puts会在结尾添加 ,printf不会 puts只能输出字符串,而printf却可以进行标准化的输出

    int I = 10;

    printf(“%d”,i)

    int I = 10;

    puts(“%d”,i) //报错

    exit(int )的作用是结束整个程序 //结束进程

    相当于把return放到main函数中退出的操作

    4 声明和定义

    实现一个函数,功能和strlen一样的, int my_strlen(char str[])

    (图中把函数放到main函数后面了)

    编译时候C编译器会报警告,C++会出错,所以应该把声明放到前面

    只要在调用的前面声明就行了,声明了好多次的情况

     

    5 分文件(多文件)编程

    1、按功能来分 xxx.h xxx.c

    2、有一个主函数测试 自定义函数 main.c

    (创建了俩文件

    gcc *.c 出现真香警告

    为了防止警告 应该加入声明

     

    (这样就不报错了

    想一下 如果我每次要使用都要声明是不是太麻烦了,

    如果有三个.c 那是不是要在三个里面都重复的写声明代码

    于是引入头文件

     

    头文件的功能是什么

    (预处理)

    结论:多个文件中,不能出现同名函数(static除外)

    xxx.c:

       函数的定义

    xxx.h:

       .c中函数的声明

    2、个主函数测试自定义函数 main.c

    同一个文件如何防止头文件重复包含(包含多次,只有一次生效):

    1、  #pragma once

    2、

    #ifndef _MYSTRLEN_H

    #define _MYSTRLEN_H

    //函数声明

    #endif

    include的原理: #include "a.h" ,则会把整个 a.h 文件都copy b.c 的开头

    xxx.c:

      函数的定义

      

    xxx.h

      .c中函数的声明

    1、  有一个主函数测试自定义函数 main.c

    多个文件中 不能出现同名函数(static除外

    同一个文件如何防止头文件重复包含(包含多次,只有一次生效)

    1.#pragma once

    2.define

    07 指针概述

    1、  内存,以一个字节为单位分配内存

    2、  每个字节的内存都有标号,这个标号就是地址,也叫指针

     

    3、  地址需要存储 32位编译器用32(4字节)存此地址 64位编译器用64(8字节)存此地址

     

    1、  房间分配号码,内存分配标号,编码

    2、  根据房号找到对应的房间,根据地址找到对应的内存,寻址

     

    08 指针补充

    09 指针的定义和使用

     

    10 指针变量和指针变量所指向的内存

     

    11 上午知识点复习

    12 指针练习

    13 野指针

    野指针:这个指针变量保存了一个没有意义(非法)的地址

    1. 只有定义后的变量,此变量的地址才是合法地址
    2. 野指针就是保存没有意义地址的指针变量
    3. 操作野指针变量本身不会有任何问题
    4. 操作野指针所指向的内存才导致报错误

    14 空指针

    15 指针大小

     

    16 多级指针

    总结:

    1. 指针变量也是一个变量,是变量就可以赋值
    2. 指针指向谁,就把谁的地址赋值给指针
    3. *p操作的是指针所指向的内存

     

    18 []不是数组专属

    19 万能指针和指针步长

    1、  不可以定义void类型的普通变量 不能确定类型 编译器就不知道分配多大空间

    void a;

    可以定义void *变量(因为大小是编译器确定的

    void * 指针也叫万能指针

    void *可以指向任何类型的变量(类型匹配)

    void *p = NULL;

    int a = 10;

    p = &a;

    printf(“*p = %d ”,*p);  //*p操作指针所指向内存

     

    这里会报错,

    或者这样写,也是会报错的

    void *可以指向任何类型的变量,使用指针所指向的内存时,最好转换为它v恩深的指针类型

    答案: void *p指向了a了 操作*p的时候不知道应该操作多少字节的内存

         所以就会报错了

     

    使用 void *p 的时候只保存了  4个字节中的一个字节

    int *指向int类型,操作内存时,操作4字节

    char *指向char类型,操作内存时,操作1字节

     

    int类型4字节

    char类型 1字节

    注意:

    1、  指针的加法,不是传提供的假发

    2、  步长由指针指向的数据类型决定

    20 const修饰符的指针

    注意加以区分:

    21 数组名

    22 指向数组首元素的指针

    23_通过指针加减访问数组元素

    24 作业

  • 相关阅读:
    JDK自带的轻量级HTTP Server进行加载。 .
    Linux系统上安装MySQL 5.5prm
    Linux系统下MongoDB数据库安装、配置、主从同步、备份与恢复
    Windows 下 MongoDB的备份(mongodump)与恢复(mongorestore)
    JAVA Socket用法详解 .
    类 ByteBuffer
    java.nio.ByteBuffer中flip、rewind、clear方法的区别
    Apache Mina2.0学习笔记(初版)
    mina源代码阅读笔记
    使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket
  • 原文地址:https://www.cnblogs.com/eret9616/p/10217553.html
Copyright © 2020-2023  润新知