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

字符数组的初始化

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

char str[] = "hello";

或者

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

当使用sizeof(str)时,得到的大小为6,此时是算上了’\0’的。

如果不指定数组长度的初始化,末尾加上’\0’,否贼输出长度未知

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

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

缓冲区溢出

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会在最后自动添加一个’\n’

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

fputs

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

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

strlen,字符串长度

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

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\n", p);
p = strtok(NULL, "@");
}

atoi转化为int

将字符串整数转化为整数

atoi(buf);

atof转化为float

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

atof(buf);

atol转化为long

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

atol(buf);

C学习笔记-字符串的更多相关文章

  1. 《python基础教程(第二版)》学习笔记 字符串(第3章)

    <python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...

  2. 【Redis】命令学习笔记——字符串(String)(23个超全字典版)

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 本篇基于redis 4.0.11版本,学习字符串( ...

  3. es6学习笔记--字符串&数值&数组&函数&对象的扩展

    这几天抽空学习了es6语法,关于字符串,数值,数组,函数以及对象的扩展,看到es6标准入门这本书,里面讲的扩展特别多,我认为有几部分在项目上用不到,就挑有用的当笔记学习了. 字符串的扩展 str.in ...

  4. Java学习笔记--字符串和文件IO

    1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1. ...

  5. Python学习笔记-字符串

    Python之使用字符串 1.所有的标准序列操作(索引,分片,乘法,判断成员资格,求长度,取最小值,最大值)对字符串同样适用.但是字符串都是不可变的. 2.字符串格式化使用字符串格式化操作符即%. f ...

  6. Java-J2SE学习笔记-字符串转化为二维数组

    1.字符串转化为二维Double数组 2.代码: package Test; public class TestDouble { public static void main(String[] ar ...

  7. Java学习笔记——字符串常用函数

    class JavaTest4_String { public static void main(String[] args) { String str1 = "IOS,ANDROID,BB ...

  8. C语言学习笔记--字符串函数

    字符串函数 需要包含头文件#include<stdio.h> strlen strcmp strcpy strchr strstr strcasestr

  9. 【学习】js学习笔记---字符串对象

    一.属性 1.length 字符串的长度,且不区分中英文的字节. 示例代码: var str="abcdefghijklmn"; var str1="中文汉语" ...

  10. Python学习笔记 - 字符串和编码

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- #第一行注释是为了告诉Linux/OS X系统, #这是一个Python可执行程序,Windows系统会忽 ...

随机推荐

  1. iterm2 "agnoster"主题设置中的一些踩坑 2018.8

    主线教程:https://www.cnblogs.com/xishuai/p/mac-iterm2.html (1)在链接的“3.配置oh My zsh”中,编辑vim~/.zshrc后两下回车,然后 ...

  2. Codeforces Round #589 (Div. 2) C - Primes and Multiplication(数学, 质数)

    链接: https://codeforces.com/contest/1228/problem/C 题意: Let's introduce some definitions that will be ...

  3. 在npm install时node-gyp出现错误

    在执行npm install的时候出现了下面的错误,安装Xcode并执行sudo xcode-select -s /Applications/Xcode.app/Contents/Developer, ...

  4. HDU 6048 - Puzzle | 2017 Multi-University Training Contest 2

    /* HDU 6048 - Puzzle [ 思维,结论 ] | 2017 Multi-University Training Contest 2 题意: 类似华容道的问题, N*M 的矩阵中N*M- ...

  5. 二维FFT,IFFT,c语言实现

    学习DIP第6天 完整内容迁移至http://www.face2ai.com/DIP-2-4-二维FFT-IFFT-c语言实现/ http://www.tony4ai.com/DIP-2-4-二维FF ...

  6. vue-cli3项目首页加载速度优化(cdn加速,路由懒加载,gzip压缩)

    今天打算上线vue的单页面项目,上线后,首页加载速度巨慢! 原因是项目上线后,网速不够快,加载js,css等资源很慢, 打开打包好的文件发现chunk-vendors.xxxxxxx.js的包很大,达 ...

  7. Nginx访问非常慢

    由于域名绑定服务器IP,而服务器上部署了多个应用,想都通过域名访问,故弄了个Nginx转发. 加了Nginx以后,服务访问明显卡顿. 查看配置: location / { proxy_pass htt ...

  8. Windows 10 共享需要网络凭据的问题

    如果Windows在资源管理器的网络中双击其他的网络设备,提示要输入网络凭据的解决办法: 打开"网络共享中心" -> "更改高级共享设置"->&qu ...

  9. Ubuntu桌面版与服务器版的区别(转)

    Ubuntu桌面版vs服务器版 提到安装Linux,Ubuntu可谓是最受欢迎的.为了满足每个人的需求,出现了不少版本或风格的Ubuntu:其中两项便是桌面版与服务器版.只要发布版本号一致,这两者从核 ...

  10. 第11组 团队Git现场编程实战

    第11组 团队Git现场编程实战 组员职责分工: 前端部分: 陈郑铧:构架的搭建,前端模块开发 陈益:前端模块开发 李镇平:前端模块开发 后端部分: 沈国煜:后端模块开发 王泽鸿:后端模块开发 林铮威 ...