C零基础视频-27-字符串

目录

  • 什么是字符串
  • C语言中的字符串
  • 字符数组与字符串的比较

什么是字符串

之前我们已经学过单个字符的文字型数据(char)。同时了解过字符串。
在C语言中,字符串用双引号包围。

#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("Hello");
    return 0;
}

字符串不是C语言中的基本数据类型。在我们之后的学习中可以看到,它是根据约定存储多个char数据的一种方式。

C语言中的字符串

为了方便研究,我们将以上代码进行修改:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    printf("%s", szHello);
    return 0;
}

实际上,当我们定义

"Hello"

时,编译器帮助我们做了以下几件事情:

  • 根据"Hello"的字符串长度,分配一段char类型的空间
  • 将"Hello"中的字符一个一个复制到以上的空间中
  • 在以上空间的末尾添加数字0作为结束标志
  • 将字符串的首地址返回(char*类型)
#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    printf("Hello字符串的空间大小: %d\r\n", sizeof("Hello"));
    printf("Hello字符串的首地址: %08X\r\n", szHello);
    return 0;
}

我们甚至可以结合数组的知识,将字符串空间对应的char数据,一个个取出来,并输出:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    int i = 0;
    for (; i < sizeof("Hello"); i++)
    {
        printf("%d: ASCII数值:%d, 对应字符:%c\r\n",
            i, szHello[i], szHello[i]);
    }
    return 0;
}

注意:C语言中规定以数字0作为字符串的结尾。

字符数组与字符串的比较

因为字符串中的每一个元素都是char类型,所以与字符数组有相似的地方。比如:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    char chAry[] = "Hello";

    printf("%s, %s\r\n", szHello, chAry);
    return 0;
}

但实际上是有区别的:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    char chAry[] = "Hello";

    chAry[0] = 'j';
    printf("%s\r\n", chAry);

    szHello[0] = 'j';
    printf("%s\r\n", chAry);
    return 0;
}

简而言之:

  • 字符数组可读可写
  • 字符串可读不可写

原文地址:https://www.cnblogs.com/shellmad/p/11695543.html

时间: 2024-11-05 13:03:56

C零基础视频-27-字符串的相关文章

C零基础视频-28-C标准库中常见的字符串操作函数

目录 字符串的特殊性 字符串比较 获取字符串长度 复制字符串 连接字符串 字符串的特殊性 字符串不是基本数据类型.因此,像操作基本数据类型那样操作,可能会失败: #include <stdio.h> int main(int argc, char* argv[]) { char* szHello = "Hello"; char chAry[] = "Hello"; printf("%s, %s\r\n", szHello, chAry

零基础学习python_字符串(14-15课)

今天回顾下我之前学习python的第一个对象--字符串,这个对象真蛋疼,因为方法是最多的,也是最常见的类型,没有之一... 内容有点多,我就搜了下网上的资料,转载下这个看起来还不错的网址吧:http://www.cnblogs.com/PeterZhang1520389703/p/7647160.html str.capitalize() --> String 返回字符串,其首字母大写,其余部分小写 1>>> str = "TEST" 2>>>

C零基础视频-45-内存的分区:全局区、栈区、堆

目录 为什么程序的内存有分区 程序运行时的内存分区 堆内存 不久的将来,我们要开始学习在C中动态申请和释放内存.在学习它们之前,我们先学习程序内存的分区,为掌握和理解动态申请.释放内存做好基础铺垫. 为什么程序的内存有分区 一般而言,我们的住房会分成多个区域(卧室.厨房.阳台.卫生间等),不同区域有不同的功能. 运行时,程序分区的道理也是一样的,它方便操作系统管理程序,内存的不同区域,功能不同. 程序运行时的内存分区 作为初学者,我们简单认识下,程序有全局区.栈区和堆区即可. 全局区:在main

C零基础视频-47-C语言操作文件

目录 C语言文件操作函数 fopen:打开或创建文件 fopen中的mode参数 fclose:关闭文件 C语言文件操作函数 C标准库中提供了一系列的函数,来操作文件.因为C库函数做了这个中间层,屏蔽掉了操作系统上对于文件的不同处理. 关于文件的常见基本操作有: 打开文件:创建文件或打开文件载体(磁盘)中已有的文件 关闭文件:类似free,释放掉内存中与文件有关的动态资源 读取文件:数据由文件载体(磁盘)到内存 写入文件:数据由内存到文件载体(磁盘) fopen:打开或创建文件 fopen的原型

C零基础视频-37-指针数组与数组指针

目录 指针数组 数组指针 指针数组 指针数组是数组,即一个数组中,每个元素都是指针. #include <stdio.h> int main(int argc, char* argv[]) { int nValue1 = 1; int nValue2 = 2; int nValue3 = 3; int * nArray[3] = { &nValue1, &nValue2, &nValue3 }; char* sz1 = "hello"; char*

C零基础视频-32-指针铺垫知识:计算机分级结构

目录 计算机的体系结构 什么是内存 指针 计算机的体系结构 冯诺依曼体系结构 哈佛体系结构 CPU是计算的核心,用于解析机器码和执行指令.CPU的数据处理能力非常快,但是(寄存器的)存储空间非常有限. 内存的数据传输速度适中(与CPU.硬盘比),存储空间适中: 硬盘数据传输速度慢,存储空间大. CPU可以(通过总线)直接操作内存,这样的能力体现在CPU指令上.实际上,计算机的绝大多数功能,都是通过CPU操作内存直接体现的. 其他的显示器.硬盘.打印机等是"外设". 因此,CPU如何定位

C零基础视频-41-使用结构体封装游戏角色

目录 关于游戏封装的思考 封装后代码 关于游戏封装的思考 原代码: #include <windows.h> #include <conio.h> #include <stdio.h> void MoveCursorTo(int nRow, int nCol) { COORD crdLocation; crdLocation.X = 2 * nCol; crdLocation.Y = nRow; SetConsoleCursorPosition(GetStdHandle

C零基础视频-39-结构体的定义与使用

目录 为什么要使用结构体 结构体的定义与使用 结构体的定义 定义结构体变量 引用结构体中的成员 为什么要使用结构体 生活中的事物,往往有多种属性,我们为了记录和表示他们,需要围绕一个事物,记录多中数据. 如一只宠物狗,他可能有:姓名.颜色.体重. 我们可以使用三个不同的变量记录它: #include <stdio.h> int main(int argc, char* argv[]) { char szName[20] = { "旺财" }; char szColor[20

C零基础视频-31-二维数组应用之游戏中的碰撞检测

目录 没有碰撞检测的版本 碰撞检测 没有碰撞检测的版本 #include <windows.h> #include <conio.h> #include <stdio.h> void MoveCursorTo(int nRow, int nCol) { COORD crdLocation; crdLocation.X = 2*nCol; crdLocation.Y = nRow; SetConsoleCursorPosition(GetStdHandle(STD_OUT