32深入理解C指针之---字符串操作
一、字符串操作主要包括字符串复制、字符串比较和字符串拼接
1、定义:字符串复制strcpy,字符串比较strcmp、字符串拼接strcat
2、特征:
1)、必须包含头文件string.h
2)、具体可以通过man 3 strcpy、man 3 strcmp、man 3 strcat帮助文件,查看具体用法
3)、输出字符串的内容是在printf函数中,使用%s的占位符,后面,只要之处字符串的首地址即可
3、字符串赋值strcpy:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char **argv)
{
char *ptrArr1 = (char *)malloc(sizeof(char) * );
strcpy(ptrArr1, "guochaoteacher");
printf("ptrArr1: %s\n", ptrArr1); char *ptrArr2 = (char *)malloc(strlen("guochaoteacher") + );
strcpy(ptrArr2, "guochaoteacher");
printf("ptrArr2: %s\n", ptrArr2); return ;
}
1)、为字符串申请内存空间,可以使用第7行的形式,直接指定字节大小,这种是做法是不安全的
2)、为字符串申请内存空间,可以使用第11行的形式,使用strlen函数确定需要的字节大小,切记字符串的结束符'\0'是需要一个字节的,这种是做法是安全的
3)、使用strcpy函数将第二个参数的内容复制到第一个参数中
4、字符串比较strcmp:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char **argv)
{
char *command = (char *)malloc(sizeof(char) * );
printf("please input command: ");
scanf("%s", command);
printf("command: %s\n", command);
if(strcmp(command, "Quit") == || strcmp(command, "quit") == ){
printf("You input the command: %s", command);
}else{
printf("You can't quit!\n");
} return ;
}
1)、为字符串申请内存空间,可以使用安全和不安全的方式,如果不能确定就将空间设置的足够大也可;
2)、使用strcmp函数时,将会比较第一个参数和第二个参数在字典中的位置,若第一个小,返回负数,大就返回正数,否则为零;
3)、使用strcmp函数比较的是两个参数中的内容;
4)、使用==比较的是两个参数中的地址,即使内容完全一样,结果也可能是否定的;
5、字符串拼接strcat:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char **argv)
{
char *ptrArr1 = (char *)malloc(sizeof(char) * );
ptrArr1 = "Hello";
printf("ptrArr1: %s and %p\n", ptrArr1, ptrArr1);
char *ptrArr2 = (char *)malloc(sizeof(char) * );
strcat(ptrArr2, ptrArr1);
printf("ptrArr2: %s and %p\n", ptrArr2, ptrArr2);
strcat(ptrArr2, " World!");
printf("ptrArr2: %s and %p\n", ptrArr2, ptrArr2); return ;
}
1)、字符串使用前,记得一定要提前申请内存空间;
2)、使用strcat函数将第二个参数的内容拼接到第一个参数中
3)、在strcat函数中,第一参数需要有足够的空间放置拼接后的内容
4)、在strcat函数中,第二参数可以是具体的字符串字面量,也可以是指针
32深入理解C指针之---字符串操作的更多相关文章
- 30深入理解C指针之---字符串和数组
一.字符串与数组 1.定义:使用字符数组表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符数组 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用数组的一一赋 ...
- 27深入理解C指针之---字符串基础
一.字符串:是以ASCII字符NUL结尾的字符序列,NUL表示为\0 1.定义:将字符按顺序存储在数组中,以NUL结尾. 2.特征: 1).每个字符串长度只是包含所有的字符,不包括最后的NUL,手动分 ...
- 深入理解C指针之五:指针和字符串
原文:深入理解C指针之五:指针和字符串 基础概念 字符串可以分配到内存的不同区域,通常使用指针来支持字符串操作.字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常 ...
- 06深入理解C指针之---指针操作和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- 33深入理解C指针之---通过字符串传递数据
一.传递字符串:在函数的参数列表中,将参数声明为char指针即可实现通过字符串传递参数 1.特征: 1).字符串以char指针的形式传递,一般是const指针传递: 2).使用字符数组声明字符串,调用 ...
- 31深入理解C指针之---指针和字符串
一.字符串与指针 1.定义:使用字符指针表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符指针 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用类似于数组的 ...
- C语言提高 (2) 第二天 用指针对字符串进行操作
2 昨日回顾 p++: (把地址转换成整型 加上它所指向的数据的大小 3指针成立条件和间接赋值 条件一:有两个变量 其中至少一个是指针 条件二:建立关联 条件三:间接操作 4间接操作的例子 5间接操作 ...
- 《深入理解C指针》
<深入理解C指针> 基本信息 原书名:Understanding and using C pointers 作者: (美)Richard Reese 译者: 陈晓亮 丛书名: 图灵程序设计 ...
随机推荐
- 将unity3d项目嵌入到Android App中使用
创建一个新的AndroidStudio app项目. 1.添加库文件:拷贝unity安装目录下的库文件:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\ ...
- 17.Yii2.0框架模型添加记录
目录 新建控制器 HomeController.php 新建model Article.php 新建控制器 HomeController.php D:\xampp\htdocs\yii\control ...
- visual studio 2019安装秘钥
美国时间4.2微软发布了最新版本的visual studio 2019 现在贴出visual studio2019的秘钥,有需要的请自取: Visual Studio 2019 Enterprise( ...
- django中的objects.get和objects.filter方法的区别
为了说明它们两者的区别定义2个models class Student(models.Model): name = models.CharField('姓名', max_length=20, defa ...
- Linux内存cache/buffer剖析
查询linux系统中空闲内存/内存使用状态查看/剩余内存查看 如何计算内存的使用量及空闲量 物理已用内存 = 实际已用内存 - 缓冲 - 缓存 = 24752 - 283 ...
- tar.xz结尾的文件的解压缩方法
例如: codeblocks-13.12-1_i386.debian.stable.tar 这个压缩包也是两层压缩,外面是xz压缩方式,里层是tar压缩方式. 解压缩方法: $xz -d ***.ta ...
- 理解依赖注入 for Zend framework 2
依赖注入(Dependency Injection),也成为控制反转(Inversion of Control),一种设计模式,其目的是解除类之间的依赖关系. 假设我们需要举办一个Party,Part ...
- 忘记MySQL的root密码的解决方法
经常会有朋友或者同事问起,MySQL 的 root 密码忘了,不知道改怎么办. 其实解决方法很简单,下面是详细的操作步骤. (1)修改配置文件my.cnf,在配置文件[mysqld]下添加skip-g ...
- HTTP重定向
404 Not Found301 Moved Permanently302 Found500 Internal Server ErrorHTTP重定向就是通过301和302两种状态码来实现的. 302 ...
- spring AOP详解三
CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截的结束拦截所有父类方法的调用,并顺势织入横切逻辑.我们采用CGLib技术可以编写一个可以为任何类创建织入横切逻辑代理对象 ...