一、字符串操作主要包括字符串复制、字符串比较和字符串拼接

    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指针之---字符串操作的更多相关文章

  1. 30深入理解C指针之---字符串和数组

    一.字符串与数组 1.定义:使用字符数组表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符数组 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用数组的一一赋 ...

  2. 27深入理解C指针之---字符串基础

    一.字符串:是以ASCII字符NUL结尾的字符序列,NUL表示为\0 1.定义:将字符按顺序存储在数组中,以NUL结尾. 2.特征: 1).每个字符串长度只是包含所有的字符,不包括最后的NUL,手动分 ...

  3. 深入理解C指针之五:指针和字符串

    原文:深入理解C指针之五:指针和字符串 基础概念 字符串可以分配到内存的不同区域,通常使用指针来支持字符串操作.字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常 ...

  4. 06深入理解C指针之---指针操作和比较

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...

  5. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  6. 33深入理解C指针之---通过字符串传递数据

    一.传递字符串:在函数的参数列表中,将参数声明为char指针即可实现通过字符串传递参数 1.特征: 1).字符串以char指针的形式传递,一般是const指针传递: 2).使用字符数组声明字符串,调用 ...

  7. 31深入理解C指针之---指针和字符串

    一.字符串与指针 1.定义:使用字符指针表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符指针 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用类似于数组的 ...

  8. C语言提高 (2) 第二天 用指针对字符串进行操作

    2 昨日回顾 p++: (把地址转换成整型 加上它所指向的数据的大小 3指针成立条件和间接赋值 条件一:有两个变量 其中至少一个是指针 条件二:建立关联 条件三:间接操作 4间接操作的例子 5间接操作 ...

  9. 《深入理解C指针》

    <深入理解C指针> 基本信息 原书名:Understanding and using C pointers 作者: (美)Richard Reese 译者: 陈晓亮 丛书名: 图灵程序设计 ...

随机推荐

  1. 【转】如何在VC下检测当前存在的串口及串口热拔插

    当我们在用VS进行串口编程时,在打开串口前,经常想知道当前PC上存在多少个串口,哪些串口可用?哪些串口已经打开了,最好是在一个Combo Box中列表系统当前所有可用的串口以供选择,然而如何获取系统当 ...

  2. JAVA中文字符串编码--GBK转UTF-8

    转载自:https://www.cnblogs.com/yoyotl/p/5979200.html 一.乱码的原因 gbk的中文编码是一个汉字用[2]个字节表示,例如汉字“内部”的gbk编码16进制的 ...

  3. python入门:数字型和字符串换行要同类型 注意连接符

    #!/usr/bin/env python # -*- coding: utf-8 -*- #数字型和字符串换行要同类型 注意连接符 a = 1 b = 2 print(str(a) + " ...

  4. 安装ipython的情况总结

    在知乎上看待一位朋友的Python的学习记录,准备跟着学一下.这位朋友用了ipython(因为他主要做科学计算,我自己将来要学习数据科学,感觉很合适),酒准备安装一下ipython,没想到出了不少问题 ...

  5. leetcode-8-pointer

    void deleteNode(ListNode* node) { *node = *node->next; }

  6. German Collegiate Programming Contest 2018​

    // Coolest Ski Route #include <iostream> #include <cstdio> #include <cstring> #inc ...

  7. LA 7056 Colorful Toy Polya定理

    题意: 平面上给出一个\(N\)个点\(M\)条边的无向图,要用\(C\)种颜色去给每个顶点染色. 如果一种染色方案可以旋转得到另一种染色方案,那么说明这两种染色方案是等价的. 求所有染色方案数 \( ...

  8. UVa 1366 DP Martian Mining

    网上的题解几乎都是一样的: d(i, j, 0)表示前i行前j列,第(i, j)个格子向左运输能得到的最大值. d(i, j, 1)是第(i, j)个格子向上运输能得到的最大值. 但是有一个很关键的问 ...

  9. luogu1725 琪露诺

    单调队列 #include <iostream> #include <cstdio> using namespace std; int n, l, r, dp[400005], ...

  10. Tensorflow 自适应学习速率

    Tensorflow 自适应学习速率 在模型的初期的时候,往往设置为较大的学习速率比较好,因为距离极值点比较远,较大的学习速率可以快速靠近极值点:而,后期,由于已经靠近极值点,模型快收敛了,此时,采用 ...