zoukankan      html  css  js  c++  java
  • C学习笔记-字符串

    对于C语言来说,字符串其实就是最后一个元素为’’的char数组

    字符数组的初始化

    字符数组常见的有两种初始化方式

    char str[] = "hello";
    

    或者

    char str[] = {'h', 'e', 'l', 'l', 'o'};
    

    当使用sizeof(str)时,得到的大小为6,此时是算上了’’的。
    如果不指定数组长度的初始化,末尾加上’’,否贼输出长度未知

    char str[] = {'a', 'b', 'c', ''};//这种初始化末尾需要加上''
    char str[] = "abc";//这种初始化不需要加上''
    

    字符串可以存放在堆区,栈区和常量区

    缓冲区溢出

    char arr[3] = {0};
    scanf(%s, arr);
    //当输入长度大于2,会溢出
    

    如果输入的字符大于字符数组的长度,会造成缓冲区溢出
    scanf会以空格作为分隔符

    字符串处理函数

    gets

    从输入设备获取输入字符串
    gets不会检查预留缓冲区是否可容纳输入数据,没有解决缓冲区溢出问题

    fgets

    fgets用于读取文件,也可从键盘读取,此时要使用stdin。fgets会截取长度符合输入指定

    char s[100] = { 0 };
    fgets(s, sizeof(s), stdin);
    

    puts

    puts函数打印字符串,与printf不同,puts会在最后自动添加一个’ ’

    char s[] = "hello"
    puts(s);
    

    fputs

    fputs是puts的文件操作版本,也不会输出多余的’ ’

    char s[] = "hello";
    fputs(s, stdout);
    

    strlen,字符串长度

    strlen返回字符串长度,不包含’’

    strlen(arr);
    

    strcat,字符串追加

    strcat(a,b);
    

    实现:

    int len_a = strlen(a);
    int len_b = strlen(b);
    for ( int i = len_a; i < len_a + len_b; i++)
    {
        a[i] = b[i - lena];
    }
    

    strncat,字符串有限追加

    strncat(a, b, sizeof(a) - strlen(a) - 1);
    

    strcmp,字符串比较

    如果相同返回0

    strcmp(a, b);
    

    strncmp,字符串有限比较

    只要指定长度内相同,则返回0

    strncmp(a, "str", 3);
    

    strcpy字符串拷贝

    把b拷贝到a

    strcpy(a, b);
    

    strncpy字符串有限拷贝

    防止拷贝越界

    sprintf,格式化字符串

    向char数组输出一个字符串,其他行为和printf一模一样

    sprintf(a, "this is a %d", 10);
    

    strchr查找字符

    返回一个位置的指针,如果没找到,返回NULL

    char *c = strchr(a, 'b');
    

    strstr查找子串

    char *c = strstr(a, "abc");
    

    strtok分割字符串

    字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

    char buf[] = "abc@defg@igk";
    char *p = strtok(buf, "@");;
    while (p)
    {
    	printf("%s
    ", p);
    	p = strtok(NULL, "@");
    }
    

    atoi转化为int

    将字符串整数转化为整数

    atoi(buf);
    

    atof转化为float

    将字符串整数转化为单精度浮点数

    atof(buf);
    

    atol转化为long

    将字符串整数转化为long类型

    atol(buf);
    
  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664803.html
Copyright © 2011-2022 走看看