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;
}
相关推荐
_F_y2 小时前
Linux:多线程
linux·运维·服务器
__lai2 小时前
iflow cli一键安装脚本运行了,也正常安装了,但是无法通过iflow命令进入软件。在termux安装iflow-cli AI工具
linux·人工智能·termux
业精于勤的牙2 小时前
三角形最小路径和(二)
算法
风筝在晴天搁浅2 小时前
hot100 239.滑动窗口最大值
数据结构·算法·leetcode
Ha_To2 小时前
2025.12.18 NAT地址转换、PAT
linux·服务器·网络
爱吃番茄鼠骗2 小时前
Linux操作系统———I/O多路复用
linux
夏乌_Wx2 小时前
练题100天——DAY31:相对名次+数组拆分+重塑矩阵
数据结构·算法
LYFlied2 小时前
【算法解题模板】-解二叉树相关算法题的技巧
前端·数据结构·算法·leetcode
vortex53 小时前
Linux 命令行入门:命令的构成与选项用法
linux·运维·服务器