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;
}
相关推荐
iAkuya1 分钟前
(leetcode)力扣100 36二叉树的中序遍历(迭代递归)
算法·leetcode·职场和发展
wangwangmoon_light9 分钟前
1.1 LeetCode总结(线性表)_枚举技巧
算法·leetcode·哈希算法
码农小韩37 分钟前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
Joren的学习记录40 分钟前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
mit6.82443 分钟前
几何|阻碍链
算法
有一个好名字1 小时前
力扣-小行星碰撞
算法·leetcode·职场和发展
MM_MS1 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
lamentropetion1 小时前
E - Equal Tree Sums CF1656E
算法
代码游侠1 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
2501_933513041 小时前
Linux下载离线rpm和依赖包的方法
linux·运维·服务器