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;
}
相关推荐
武子康27 分钟前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
雪落漂泊1 小时前
Linux进程(五):进程地址空间篇
linux·运维·服务器
秋天的怀念_David1 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法
AR-26710-2 小时前
Linux Day32——网络,ROCE-IB与以太网
linux·运维
NEFU_Jyj3 小时前
贝尔数(组合数学)
算法
希和20274 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
Pniubi4 小时前
力扣73 矩阵置零
算法·leetcode·矩阵
布莱克60514 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
LongRunning16 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo