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;
}
相关推荐
Escalating_xu1 小时前
【Linux 网络编程】TCP 跨平台实战:用 Windows 客户端访问 Linux 服务器
linux·服务器·网络
忆挽篱笙歌2 小时前
环境变量,本地变量
linux·运维·服务器
罗西的思考3 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer3 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
高晶5 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy5 小时前
大数计算思路
算法
吹什么轩5 小时前
linux系统复习:僵尸进程与孤儿进程
linux·运维·php
高晶5 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
殷忆枫5 小时前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker
学电子她就能回来吗5 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode