C语言:字符串存在哪?

devtools/2024/10/22 12:19:36/

文章目录

  • 0x1
  • 0x11 栈上(Stack)
  • 0x12 堆上(Heap)
  • 0x13 常量存储区(Constant)
  • 0x2
  • 0x21 常量区
  • 0x22 栈区

0x1

0x11 栈上(Stack)

局部变量(包括在函数内部定义的数组和变量)通常存储在栈上。
当你在函数内部定义一个字符数组并初始化一个字符串时,这个字符串就存储在栈上。

void function() {char str[] = "Hello, World!";// str 存储在栈上
}

0x12 堆上(Heap)

使用动态内存分配函数,如 malloc 或 calloc,分配的内存位于堆上。
如果你使用这些函数为字符串分配内存,字符串将存储在堆上。

char *str = malloc(20 * sizeof(char));
if (str != NULL) {strcpy(str, "Hello, World!");// str 存储在堆上
}

0x13 常量存储区(Constant)

使用字符串字面量(如 “Hello, World!”)通常存储在只读的数据段中,这个区域有时被称为常量存储区。
这些字符串是不可修改的,尝试修改它们将导致未定义行为。

char *str = "Hello, World!";
// 字符串字面量存储在常量存储区

0x2

0x21 常量区

#include <stdio.h>
char * func01(void) {char *s = "hell world";char buf[] = "hello world";return s;
}
int main(void) {char *p = func01();printf("char ptr is %s\n", p);
}

编译:
gcc -o demo demo.c
运行:
char ptr is hell world

0x22 栈区

#include <stdio.h>
char * func01(void) {char *s = "hell world";char buf[] = "hello world";return buf;
}
int main(void) {char *p = func01();printf("char ptr is %s\n", p);
}

编译:
gcc -o demo demo.c

demo.c: In function ‘func01’:
demo.c:7:15: warning: function returns address of local variable [-Wreturn-local-addr]7 |        return buf;

运行:
char ptr is (null)


http://www.ppmy.cn/devtools/104145.html

相关文章

18044 成绩等级评分

### 思路 1. 从键盘输入一个整数成绩。 2. 判断成绩是否在0到100之间&#xff1a; - 如果不在范围内&#xff0c;输出“error”。 - 如果在范围内&#xff0c;根据成绩范围输出对应的等级&#xff1a; - 90分以上为A - 80到89分为B - 70到79分为C - …

可以根据手机的折叠状态改变播放音效:nova Flip 的妙趣音效

由于折叠机最基础的“可折叠”属性&#xff0c;导致折叠机的扬声器相对于人的位置来说会存在更多的变化&#xff0c;在不同的折叠状态下&#xff0c;听感方面可能就会大有不同。 nova Flip手机利用这一特性&#xff0c;首次根据折叠形态差异&#xff0c;自适应了不同形态的音效…

tomcat 调优

一、Tomcat 调优的关键领域 1. **连接数和线程池配置** 2. **JVM 配置和 GC 调优** 3. **Tomcat 内存调优** 4. **文件和网络配置** 5. **Tomcat 缓存和压缩设置** 二、连接数和线程池配置 Tomcat 的连接数和线程池配置对服务器的并发处理能力有直接影响。默认情况下&#x…

郑州建站网页手机版

随着移动互联网的迅猛发展&#xff0c;越来越多的企业和个人开始重视手机网页的建设。在郑州&#xff0c;这一趋势尤为明显&#xff0c;搭建手机网页已经成为提升品牌形象和吸引客户的重要方式。本文将就郑州建站网页手机版的现状、重要性及注意事项进行探讨。 首先&#xff0c…

取模+背包

前言&#xff1a;一开始我想错了&#xff0c;一开始我想的是直接统计每一项模完后的和&#xff0c;我们只要能够取到一半&#xff0c;那么就有解&#xff0c;但是时间复杂度太大了 我们做推导 x y s u m x y sum xysum x − y k ∗ n x - y k * n x−yk∗n 那么我们可…

win11 更新后导致 docker 启动报虚拟机错误解决办法

1. 确保勾选了 hyper-v 和 适用于 Linux 的 windows 子系统 2. 管理员运行 powershell, 挨个执行以下4个命令后&#xff0c;重启电脑 # 重新启用 WSL 和 VirtualMachine 功能&#xff1a;DISM /online /enable-feature /featurename:VirtualMachinePlatform /norestartDISM /o…

【MySQL】插入优化篇——(少量插入数据优化&批量插入数据load指令)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

【Python系列】SQLAlchemy 基本介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…