学习了数组,我们知道获取一段内存块。例如,我们定义一个字符数组,得到一段连续的内存块,用来存放一个字符串。例如:
程序编译运行结果如下:
可以看到,我们定义了buf[]字符数组,就是申请了一段内存空间,存放一串字符串。那么,我们能否进行字符串拷贝、字符串拼接这样的操作?
答案是可以的,C语言提供了strcpy()、strcat()、strcmp等函数,用于操作字符串。而且,提供了memcpy()、memset()、memcmp()等函数,用于操作内存块,下面我们学习这些函数的使用。这些函数需要包含头文件:
#include
这些函数的定义如下:
//字符串拷贝函数
//把src指向的字符串,拷贝到dest指向的内存空间;
//注意:dest指向的内存空间,必须要足够大,可以存放完 src 指向的字符串;
//该函数是字符串拷贝函数,要求src参数必须是一个有效的字符串,必须有字符串结束符;
char *strcpy(char* dest, const char *src);
//字符串连接函数
//把src指向的字符串,拷贝到dest字符串的末尾;
//注意:dest指向的内存空间,必须足够强大;可以添加存放src字符串到dest字符串的末尾;
char *strcat(char *dest, const char *src);
//字符串比较函数
//首先将s1第一个字符值减去s2第一个字符值,若差值为0则再继续比较下个字符,若差值不为0 则将差值返回;
//如果s1,s2对应的字符一直相等,就判断到s1和s2中某个字符串结束为止;
//返回值如果是0值,说明s1和s2字符串相等;
//返回值如果大于0,说明s1字符串比较大;
//返回值如果小于0,说明s2字符串比较大;
int strcmp(const char *s1,const char *s2);
//内存块拷贝函数
//把src指向内存块的 n 个字节,拷贝到 dest 指向的内存块;
//注意:strcpy()函数只能够拷贝字符串,memcpy函数可以拷贝内存块;
void *memcpy(void *dest, const void *src, size_t n);
//内存块设置函数
//使用参数 c 填充到 s 指向内存块的 n 个字节空间;
//注意: 参数 c 是 int 类型,但是,只使用参数 c 的低字节填充 s 指向的内存块;
//例如 int c = 0x55667788; 就使用低字节 0x88 来填充数据;
void *memset(void *s, int c, size_t n);
//内存块比较函数;
//首先将s1第一个字节值减去s2第一个字节值,若差值为0则再继续比较下个字节,若差值不为0 则将差值返回;
//如果s1和s2的字节一直相等,一直判断到第n个字节;
//返回值如果是0值,说明s1,s2内存块的前n个字节相同;
//返回值如果大于0,说明s1内存块的ASCII值大;
//返回值如果小于0,说明s2内存块的ASCII值大;
int memcmp(const void *s1, const void *s2, size_t n);
下面我们举例分析这些函数的使用,代码如下:
程序编译运行结果如下:
在这个程序中,我们测试了strcpy()、strcat()、memcpy()等函数的使用。例如:
strcpy(buf1, pstr1);//把pstr1字符串拷贝到buf1缓存;
此时,把pstr1字符串拷贝到buf1[]缓存中;
strcat(buf1, pstr2);//把pstr2字符串拷贝到buf1缓存的末尾;
此时,把pstr2字符串拼接到buf1[]缓存中存放字符串的末尾;所以,输出:
buf1 = 韦凯峰 Linux C/C++ 编程,Linux系统编程,Openwrt系统开发!微信:13926572996
//给buf1[]缓存的128个字节设置0值;相当于清空缓存的数据;
memset(buf1, 0, 128);
此时,给buf1[]缓存中的前128个字节设置0值。
memcpy(buf1, pstr1, strlen(pstr1));
此时,把pstr1指向内存的字符串长度,拷贝到buf1[]缓存数组中。
这些字符串和内存块的操作函数,非常有用,读者需要多加练习掌握。必须要自己手动敲打代码,多加练习测试,自己总结出这些API函数使用的方式。有任何疑问,可以联系作者,探讨、解决遇到的问题。
本章节我学习了C语言指针更复杂的知识点,该知识点有些难度,建议读者多看几遍,多加思考。也可以联系作者,一起讨论学习!
作者建议:在学习的过程中,一定要多敲代码,多加思考。有任何疑问的地方,可以通过调试代码来分析问题和解决问题。
我们不要追求速度,不要走马观花式地学习。要稳扎稳打,掌握好每一个知识点!
读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。