Linux环境下的C语言编程(四十三)

字符串的基本概念

字符串是由零个或多个字符组成的有序序列,在C语言中以空字符'\0'(ASCII码为0)作为结束标志。

一个完整的字符串定义必须包含三个要素:

  1. 字符数组

  2. 有效的字符内容

  3. 结束符'\0'

实例:
复制代码
#include <stdio.h>
#include <string.h>

int main() {
    // 字符串的几种表示方式
    
    // 1. 字符数组
    char str1[20] = "Hello, World!";
    
    // 2. 字符指针
    char *str2 = "Hello, C Language!";
    
    // 3. 直接初始化字符数组
    char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'};
    
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    printf("str3: %s\n", str3);
    
    return 0;

相同的字符串字面量可能在内存中只存储一份

实例:
复制代码
#include <stdio.h>

int main() {
    // 实验1:字符串字面量的存储位置
    char *str1 = "Hello";  // 存储在只读段
    char *str2 = "Hello";  // 相同的字符串字面量
    
    printf("str1地址: %p\n", (void*)str1);
    printf("str2地址: %p\n", (void*)str2);
    printf("是否相同地址: %s\n", str1 == str2 ? "是" : "否");
    
    return 0;
}

字符串字面量存储在程序的只读段,不可修改

实例:
复制代码
#include <stdio.h>

int main() { 
    
    // 实验2:字符串字面量的不可修改性
    // str1[0] = 'h';  // 运行时错误:Segmentation fault
    
    return 0;
}

字符数组会在栈上创建字符串的副本,可修改

实例:
复制代码
#include <stdio.h>

int main() {
    
    char arr1[] = "Hello";  // 栈上创建副本
    char arr2[] = "Hello";  // 另一个副本
    
    printf("arr1地址: %p\n", (void*)arr1);
    printf("arr2地址: %p\n", (void*)arr2);
    arr1[0] = 'h';  // 可以修改
    
    return 0;
}
相关推荐
疯狂的喵3 小时前
C++编译期多态实现
开发语言·c++·算法
scx201310043 小时前
20260129LCA总结
算法·深度优先·图论
2301_765703143 小时前
C++中的协程编程
开发语言·c++·算法
m0_748708053 小时前
实时数据压缩库
开发语言·c++·算法
小魏每天都学习4 小时前
【算法——c/c++]
c语言·c++·算法
JiMoKuangXiangQu4 小时前
ARM64 进程虚拟地址空间布局
linux·arm64 虚拟地址布局
智码未来学堂4 小时前
探秘 C 语言算法之枚举:解锁解题新思路
c语言·数据结构·算法
Halo_tjn4 小时前
基于封装的专项 知识点
java·前端·python·算法
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
春日见5 小时前
如何避免代码冲突,拉取分支
linux·人工智能·算法·机器学习·自动驾驶