首页 > 系统相关 >Linux-应用编程学习笔记(字符串处理)

Linux-应用编程学习笔记(字符串处理)

时间:2024-06-11 11:01:23浏览次数:28  
标签:const int 编程 char Linux 字符串 返回值 include

一、字符串输入/输出

1、字符串输出

//C库函数,向标准输出设备(屏幕、显示器)输出字符串并自行换行
#include <stdio.h>
int puts(const char *s);

s: 需要进行输出的字符串。
返回值: 成功返回一个非负数;失败将返回 EOF, EOF 其实就是-1。
//C库函数,既可以是标准输出、标准错误设备,也可以是一个普通文件。
#include <stdio.h>
int fputs(const char *s, FILE *stream);

s: 需要输出的字符串。
stream: 文件指针。
返回值: 成功返回非负数;失败将返回 EOF。
//C库函数,把参数 c 指定的字符(一个无符号字符)输出到标准输出设备
include <stdio.h>
int putchar(int c);

c: 需要进行输出的字符。
返回值: 出错将返回 EOF。
//C库函数,既可以是标准输出、标准错误设备,也可以是一个普通文件。
#include <stdio.h>
int fputc(int c, FILE *stream);

c: 需要进行输出的字符。
stream: 文件指针。
返回值: 成功时返回输出的字符; 出错将返回 EOF。

2、字符串输入

//C库函数
#include <stdio.h>
char *gets(char *s);

s: 指向字符数组的指针, 用于存储字符串。
返回值: 如果成功, 该函数返回指向 s 的指针; 如果发生错误或者到达末尾时还未读取任何字符,则返
回 NULL。

gets和scanf区别:1、gets只以回车换行符为分隔符,scanf以空格,换行符,TAB的名号都为分隔符。2、gets读取的时候,会丢弃回车换行符,scanf不会讲分隔符读走丢弃。

二、字符串长度

//C库函数
#include <string.h>
size_t strlen(const char *s);

s: 需要进行长度计算的字符串,字符串必须包含结束字符' \0 '。
返回值: 返回字符串长度(以字节为单位),字符串结束字符' \0 '不计算在内。

sizeof 和 strlen 的区别

  •  sizeof 是 C 语言内置的操作符关键字,而 strlen 是 C 语言库函数
  • sizeof 仅用于计算数据类型的大小或者变量的大小,而 strlen 只能以结尾为' \0 '的字符串作为参数;
  • 编译器在编译时就计算出了 sizeof 的结果,而 strlen 必须在运行时才能计算出来;
  • sizeof 计算数据类型或变量会占用内存的大小, strlen 计算字符串实际长度

三、字符串拼接

#include <string.h>
char *strcat(char *dest, const char *src);

dest: 目标字符串。
src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。

要保证 dest 有足够的存储空间来容纳两个字符串,否则会导致溢出错误; dest 末尾的' \0 '结束字符会被覆盖, src 末尾的结束字符'\0 '会一起被复制过去,最终的字符串只有一个' \0 '。




//可以指定源字符串追加到目标字符串的字符数量
#include <string.h>
char *strncat(char *dest, const char *src, size_t n);

dest: 目标字符串。
src: 源字符串。
n: 要追加的最大字符数。
返回值: 返回指向目标字符串 dest 的指针。

四、字符串拷贝

//必须保证dest空间够大
#include <string.h>
char *strcpy(char *dest, const char *src);

dest: 目标字符串。
src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。



#include <string.h>
char *strncpy(char *dest, const char *src, size_t n);

dest: 目标字符串。
src: 源字符串。
n: 从 src 中复制的最大字符数。
返回值: 返回指向目标字符串 dest 的指针。

五、内存填充

#include <string.h>
void *memset(void *s, int c, size_t n);

s: 需要进行数据填充的内存空间起始地址。
c: 要被设置的值,该值以 int 类型传递。
n: 填充的字节数。
返回值: 返回指向内存空间 s 的指针。



#include <strings.h>
void bzero(void *s, size_t n);

s: 内存空间的起始地址。
n: 填充的字节数。
返回值: 无返回值。

六、字符串比较

#include <string.h>
int strcmp(const char *s1, const char *s2);

s1: 进行比较的字符串 1。
s2: 进行比较的字符串 2。
返回值:
⚫ 如果返回值小于 0,则表示 str1 小于 str2
⚫ 如果返回值大于 0,则表示 str1 大于 str2
⚫ 如果返回值等于 0,则表示字符串 str1 等于字符串 str2




#include <string.h>
int strncmp(const char *s1, const char *s2, size_t n);

s1: 参与比较的第一个字符串。
s2: 参与比较的第二个字符串。
n: 最多比较前 n 个字符。
返回值: 返回值含义与 strcmp()函数相同。

七、字符串查找

//从前往后查找字符
#include <string.h>
char *strchr(const char *s, int c);

s: 给定的目标字符串。
c: 需要查找的字符。
返回值: 返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。





//从后到前查找字符
#include <string.h>
char *strrchr(const char *s, int c);
函数参数和返回值含义与 strchr()函数相同。





#include <string.h>
char *strstr(const char *haystack, const char *needle);

haystack: 目标字符串。
needle: 需要查找的子字符串。
返回值: 如果目标字符串 haystack 中包含了子字符串 needle,则返回该字符串首次出现的位置;如果未
能找到子字符串 needle,则返回 NULL。

八、字符串与数字互转

1、字符串转整形

//使用 atoi()、 atol()、 atoll()函数只能转换十进制表示的数字字符串,即 0~9。
#include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);

nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 int 类型数据、 long int 类型数据以及 long long 类型数据。





#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);

nptr: 需要进行转换的目标字符串。
endptr: char **类型的指针, 如果 endptr 不为 NULL,则 strtol()或 strtoll()会将字符串中第一个无效字符的地址存储在*endptr 中。如果根本没有数字, strtol()或 strtoll()会将 nptr 的原始值存储在*endptr 中(并返回 0)。 也可将参数 endptr 设置为 NULL,表示不接收相应信息。
base: 数字基数, 参数 base 必须介于 2 和 36(包含)之间,或者是特殊值 0。 
返回值: 分别返回转换之后得到的 long int 类型数据以及 long long int 类型数据。




#include <stdlib.h>
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

2、字符串转浮点型

#include <stdlib.h>
double atof(const char *nptr);

nptr: 需要进行转换的字符串。
返回值: 返回转换得到的 double 类型数据。




#include <stdlib.h>
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);

endptr:NULL全部转换

3、数字转字符串

printf()、sprintf()、snprintf()

九、给应用程序传参

int main(int argc, char **argv)
{
    /* 代码 */
}

int main(int argc, char *argv[])
{
    /* 代码 */
}

/*传递进来的参数以字符串的形式存在,字符串的起始地址存储在 argv 数组中,参数 argc 表示传递进来
的参数个数,包括应用程序自身路径名,多个不同的参数之间使用空格分隔开来,如果参数本身带有空格、
则可以使用双引号" "或者单引号' '的形式来表示。*/

十、正则表达式

正则表达式通常被用来检索、替换那些符合某个模式(规则)的字符串,正则表达式描述了一种字符串的匹配模式(pattern),可以用来检查一个给定的字符串中是否含有某种子字符串、将匹配的字符串替换或者从某个字符串中取出符合某个条件的子字符串。

十一、C语言中正则表达式

编译正则表达式
匹配正则表达式
释放正则表达式
匹配 URL 的正则表达式:
^((ht|f)tps?)://[-A-Za-z0-9_]+(\.[-A-Za-z0-9_]+)+([-A-Za-z0-9_.,@?^=%&:/~+#]*[-A-Za-z0-9_@?^=%&/~+#])?$

标签:const,int,编程,char,Linux,字符串,返回值,include
From: https://blog.csdn.net/chinalihuanyu/article/details/134643650

相关文章

  • 在Linux中,如何进行调度任务?什么是 crontab 并解释 crontab 中的字段?
    在Linux中,调度任务通常指的是在预定的时间自动执行脚本或命令。cron(cronjob)是一种常用的任务调度工具,它按照设定的时间表周期性地执行任务。1.什么是crontab?crontab是一个配置文件,它包含了一个或多个cron任务的列表。每个任务都有一个特定的时间表,定义了任务何时执行。cro......
  • linux内存管理(二)- vmalloc
    个人笔记,谨慎观看.先看看vmalloc是怎么实现的。它能在非连续物理内存之上建立连续的虚拟内存映射。这里有一篇博客Linux内存管理(6)vmalloc-ArnoldLu-博客园(cnblogs.com)调用链vmalloc->_vmalloc_node->_vmalloc_node_rangevoid*__vmalloc_node(unsignedlongsize,......
  • 在Linux中,如何规划⼀台 Linux 主机,步骤是怎样?
    在Linux中规划一台主机是一个涉及多个方面的过程,以下是一个详细的步骤指南:1.确定需求首先,明确你的需求,包括预期的硬件配置、操作系统版本、软件需求等。这有助于为后续的磁盘分区和资源分配提供依据。2.选择合适的硬件配置处理器(CPU):选择适合应用场景的处理器。对于小型系......
  • 学会spring boot 的这些,编程瞬间变得简单了,效率也提高了!
    在SpringBoot应用中,断言主要用于测试环境中验证代码行为是否符合预期。虽然SpringBoot自身不直接包含断言库,但通常我们会使用JUnit(一个广泛应用于Java的单元测试框架)来进行测试,其中包含了丰富的断言方法来帮助我们进行各种条件验证。下面通过一些具体的示例来详细说明如何在S......
  • Linux 相关基础知识(无关命令)
    Linux相关基础知识(无关命令)目录Linux相关基础知识(无关命令)1.Linux系统的启动过程2.linux内核的作用3.linux七种文件以及对应符号4.linux的目录结构5.MMU内存管理单元6.文件系统(FAT32和NTFS)7.内存1.Linux系统的启动过程1)上电 2)执行启动引导程序 3)加载linux内核......
  • 玄机——第一章 应急响应- Linux入侵排查 wp
    文章目录一、前言二、概览简介三、参考文章四、步骤(解析)步骤#1.1web目录存在木马,请找到木马的密码提交步骤#1.2服务器疑似存在不死马,请找到不死马的密码提交步骤#1.3不死马是通过哪个文件生成的,请提交文件名步骤#1.4黑客留下了木马文件,请找出黑客的服务器ip提交步骤......
  • 文件系统(六):一文看懂linux ext4文件系统工作原理
    liwen012024.06.09前言Linux系统中的ext2、ext3、ext4文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级。目前ext4是一个相对较成熟、稳定且高效的文件系统,适用于绝大部分规模和需求的Linux环境。ext4它突出的特点有:数据分段管理、多块分......
  • 【JS封装-兼容IE(较旧版本如IE8及以下)】强化编程实践:精选JavaScript函数封装集锦-添加E
    目录添加Event监听获取非行间样式JSON.parse与JSON.stringifyquerySelector与querySelectorAll的兼容支持跨浏览器的classList操作兼容性处理console.log兼容性处理forEach方法Promise的兼容性处理FetchAPI的兼容性处理添加Event监听IE8及以下版本不支持addEvent......
  • linux:centos7升级glibc到2.36
    #安装依赖的东东yuminstall-ygccgcc-c++glibc-developenssl-developenssl-staticzlib-devellzmatk-develxz-develbisonbzip2bzip2-develncurses-develgdbm-develreadline-develsqlite-devellibffi-develtexinfolibmpc-devel#安装makecd/chz/ins......
  • Linux下安装python3.10.12环境
    安装python3编程环境检查是否安装python3python3-V安装python3依赖sudoyum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel下载python3资源包......