Linux c --- 数组与字符串
来源:互联网 发布:淘宝经典文案 编辑:程序博客网 时间:2024/06/06 00:38
Linux c — 数组与字符串
1.数组与字符串的常用函数
1.1 memset
首先可以用man命令查看一下memset函数的使用手册
关于man命令在linux下开发的使用
man 1 +命令 如:ls,man
man 2 +系统借口 如:open,close
man 2 +C语言库函数 如:fopen,memset
- NAME :函数名和该函数的释义
- SYNOPSIS :函数的头文件和函数的使用方法
- DESCRIPTION :函数参数的解释
- RETURN VALUE:函数返回值
- CONFORMING TO:遵循的标准
- SEE ALSO:列出与该函数相似的函数
memset函数就是我们通常的初始化函数,虽然C语言的库为我们提供了该函数,当我们使用时可以直接调用,但是作为一名开发者,我们必须懂得该函数的原理,并且会写该函数。
这里贴出Linux内核源码,可以通过对比学习学习。
void *memset(void *s, int c, size_t count){ char *xs = s; while (count--) *xs++ = c; return s;}
这里补充如何配置ctags(Generate tag files for source code)来阅读源码
1.首先在网上下载并解压Linux内核源码包
2.cd 进入解压的文件,执行命.令ctags -R ./ 生成tags文件
3.vim /etc/vimrc 编辑vim配置文件 set tags=/linux内核源码目录路径/tags
4.vim -t 要查看的变量名或者函数
5.或者vim进入冒行模式,输入 : ta 要查看的变量名或函数
6.Ctrl+ ]跳到光标所在函数或者结构体的定义处
1.2 strlen
strlen是一个求字符串长度的函数,不包含’\0’
源码在此
size_t strlen(const char *s){ const char *sc = s; while (*sc != '\0') sc++; return sc - s;}
1.3 strcpy
strcpy是一个拷贝字符串的函数,strncpy是一个拷贝字符串制定长度的函数
源码在此
char *strcpy(char *dest, const char *src){ char *tmp = dest; while ((*dest++ = *src++) != '\0') /* nothing */; return tmp;}
1.4 strcmp
strcmp函数是比较两个字符串的大小,返回一个整形变量
若str1 = str2,则返回零;
若str1 < str2,则返回负数;
若str1 > str2,则返回正数。
源码如下:
int strcmp(const char *str1, const char *str2){ const unsigned char *s1 = (const unsigned char *)str1; const unsigned char *s2 = (const unsigned char *)str2; int delta = 0; while (*s1 || *s2) { delta = *s1 - *s2; if (delta) return delta; s1++; s2++; } return 0;}
//s1和s2作自增运算时,不应该放在 while()里,避免结束循环时,额外多做一次自增运算。
1.4 strstr
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
源码在此:
char *strstr(const char *s1, const char *s2){ size_t l1, l2; l2 = strlen(s2); if (!l2) return (char *)s1; l1 = strlen(s1); while (l1 >= l2) { l1--; if (!memcmp(s1, s2, l2)) return (char *)s1; s1++; } return NULL;}
//memcmp是将地址为s1和s2的两块内存作比较。
//strncmp是将两个字符串s1,s2按字节进行比较,遇到’\0’截止。
1.5 atoi
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数
这里我自己实现的最简单的版本,只能转换正整数
int myatoi(char *p){ int i; int res = 0; for(i = 0; i < strlen(p); i++){ res = (*(i+p) - '0') + 10 *res; } return res;}
2.char a[] 与 char *p的区别
char a[] = "hello";char *p = "hello";
a是一个数组,存放一串字符,每个字符在内存的栈区都对应一个地址,是可读可写的一段空间。
p是一个指针,存放字符串”hello”的地址,指针p在栈区对应一个地址,但p指向”hello”,”hello”却是常量,不能对p指向的地址作写操作。
内存分区:
3.主函数带参
#include <stdio.h>int main(int argc, char *argv[]){ printf("%d\n", argc); printf("%s\n", argv[0]); printf("%s\n", argv[1]); printf("%s\n", argv[2]); printf("%s\n", argv[3]); printf("%s\n", argv[4]); return 0;}
int argc存放参数个数,包括./main的执行命令
char *argv[] 是一个指针数组,每一个数组元素都是一个指针,指向对应位置上参数的地址
4.头文件<>和”“的区别
- <>一般包含标准库的头文件,让编译器去制定目录文件区查找
- “”一般包含自己创建的头文件,让编辑器去在当前目录文件中查找
- Linux c --- 数组与字符串
- C:数组与字符串
- C数组与字符串
- linux下C语言中的字符数组与字符串
- C语言--数组与字符串
- c语言数组与字符串
- C字符数组与字符串
- C语言 数组与字符串
- Object-c字符串与数组
- Objective-C字符串与数组
- C字符串数组与字符串指针
- c风格字符串与c风格字符串数组
- C 字符串与二进制数组转换
- c语言中的字符数组与字符串
- c语言中的字符数组与字符串
- c语言中字符串与字符数组
- c语言中的字符数组与字符串
- c语言 字符数组 与 字符串
- 【Hibernate】一对多关联映射
- bootstrap可视化拖动操作
- 栈的压入、弹出序列
- hdu 5493 Queue 线段树加二分
- android 中activity的回调
- Linux c --- 数组与字符串
- 【VK Cup 2016 - Round 1 (Div 2 Edition)E Bear and Contribution(目标平行线差值相减) ★ ★
- 淘宝分销平台.Net/MVC项目设计
- UVa 11992 Fast Matrix Operations (线段树区间修改大杂烩)
- 网页插入实时获取时间
- debian jessie 下安装 mysql并移动数据目录
- Codeforces Problem 714A Meeting of Old Friends(区间交)
- 剑指offer面试题28:字符串的排列 Java实现
- 求最大公约数和最大公倍数