首页 > 系统相关 >内存字符串有关问题

内存字符串有关问题

时间:2025-01-20 14:43:21浏览次数:1  
标签:stdata 字节 int 有关 namespace char 内存 字符串 include

问题一:

#include<iostream>
#include<cstdint>
#include <cstring>
using namespace std;

typedef struct data
{
    char hwid[4];
    char sip[4];
    char rev[4];

}Data;

int main(){
    Data stdata;
    memset(&stdata,0,sizeof(stdata));
    strcpy(stdata.hwid,"2222");
    strcpy(stdata.sip,"1111");
    printf("%s %s !!!\r\n",stdata.hwid,stdata.sip); 
//输出结果:
//22221111 1111 !!! return 0; }

输出结果的原因为:

字符串四个字节被填满,后面没有添加\0,所以导致printf读取完hwid中的数据接着读取sip中的数据,直到读取到\0。

 

问题二:

#include<iostream>
#include<cstdint>
#include <cstring>
using namespace std;

class CBase{

    public:
    virtual void foo()=0;
    virtual ~CBase(){}
};

class CDerived:public CBase{

    public:
    void foo() override{}
/*
override 是 C++11 引入的一个关键字,用于显式地标记派生类中的成员函数是对基类虚函数的重写。它的作用是 提高代码的可读性和安全性,帮助开发者避免一些常见的错误。
*/ private: int x; double y; }; int main() { CDerived dev; cout<<sizeof(dev)<<endl; //输出结果为 //24 return 0; }

输出结果分析:

  • CDerived 的大小由以下部分组成:

    • 虚函数表指针(8 字节)。

    • int x(4 字节) + 填充(4 字节)。

    • double y(8 字节)。

  • 总计:24 字节。

 

问题三:

#include<iostream>
#include<cstdint>
#include <cstring>
using namespace std;

int main()
{

    char buf[8];
    memset(buf,'a',sizeof(buf));
    cout<<buf<<endl;
    strncpy(buf,"123456789",sizeof(buf));
    cout<<buf<<endl;
//输出结果为
//aaaaaaaa
//12345678
return 0;

}

输出结果分析:

只能复制8个数据,所以显而易见。

 

问题四:

#include<iostream>
#include<cstdint>
#include <cstring>
using namespace std;

void func()
{
    char a[20]="abcde1234";
    char *const c=a;//常量指针
    char b;
    a[0]='X';
    c[1]='Y';
    cout<<a<<endl;
    cout<<c<<endl;
}

int main()
{
  func();
//输出结果:
  //XYcde1234
   //XYcde1234
return 0;
}

输出结果分析:
常量指针,指向的位置不变。变量a所指向的内存区域是静态存储区。

 

标签:stdata,字节,int,有关,namespace,char,内存,字符串,include
From: https://www.cnblogs.com/LJianYu/p/18681345

相关文章

  • Java类加载机制与JVM运行时数据区各逻辑内存区域与JDK的版本相关差异浅谈
    Java类加载机制与JVM运行时数据区各逻辑内存区域与JDK的版本相关差异浅谈 【摘要】JVM(JavaVirtualMachine)作为Java研发人员工作的每天都会接触到的虚拟机,其运行机制与底层原理想必大家都略知一二,今天我将从初学者的角度出发,结合甲骨文官方的技术文档,对部分Java虚拟机的相关......
  • 02内存结构篇(D2_剖析运行数据区)
    目录学习前言一、程序计数器1.作用2.存储的数据3.异常三、Java虚拟机栈1.栈帧1.1.局部变量表存储内容存储容量其他1.2.操作数栈作用存储内容存储容量1.3.动态连接1.4.方法返回1.5.附加信息2.栈异常四、本地方法栈1.本地方法1.1.什么是本地......
  • 02内存结构篇(D1_自动内存管理)
    目录一、内存管理1.C/C++程序员2.Java程序员二、运行时数据区1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区运行时常量池三、Hotspot运行时数据区四、分配JVM内存空间分配堆的大小分配方法区的大小分配线程空间的大小一、内存管理1.C/C......
  • 字符串
    字符串定义字符串:由若干个字符构成的字符序列,每一个字符位置是固定的在java中,提供了一个类来表示字符串:StringJava程序中的所有字符串文字(例如"abc")都被实现为此类的实例【对象】。因为String对象是不可变的,它们可以被共享。思考思考:1、同一个内容的字符串,为什么地......
  • Java几种常见的内存溢出及其解决方法
    java.lang.OutOfMemoryError:Javaheapspacejava.lang.OutOfMemoryError:GCoverheadlimitexceededjava.lang.OutOfMemoryError:Unabletocreatenewnativethreadjava.lang.StackOverflowError微信扫码查看:JAVA基础之内存机制.pptx......
  • 第八章(下) 内存管理系统
    第八章(下)内存管理系统本文是对《操作系统真象还原》第八章学习的笔记,欢迎大家一起交流。在上一节中,我们实现了位图的定义以及相关操作,这节中我们要继续完善内存管理系统,最终实现malloc函数,拆分成两个步骤就是内存池的初始化以及内存分配的实现。内存池的初始化本节我们将规划......
  • 学霸带你游戏化理解字符串操作与匹配算法
    游戏开发字符串操作应用在现代游戏开发中,字符串处理是一个不可或缺的环节。游戏中的文本内容、玩家输入、动态生成的关卡信息等,都依赖于高效和精确的字符串操作。无论是在处理任务文本、玩家名字,还是实时聊天信息、语言本地化,字符串的高效管理和优化都直接影响着游戏的性能和......
  • Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,不输G
    大家好,我是编程乐趣。行业诸多大佬一直在说:“‌2025年将是AI应用元年‌”,虽然说大佬的说法不一定对,但AI趋势肯定没错的。对于我们程序员来说,储备AI应用开发技能,不管对找工作、接项目、创业肯定是不错的选择。从今天开始,我将会学习和研究Phi小模型,并基于此模型开发一些小D......
  • 算法随笔_9:压缩字符串
    上一篇: 算法随笔_8:寻找重复数-CSDN博客题目描述如下:给你一个字符数组 chars ,请使用下述算法压缩:从一个空字符串 s 开始。对于 chars 中的每组连续重复字符 :如果这一组长度为 1 ,则将字符追加到 s 中。否则,需要向 s 追加字符,后跟这一组的长度。压缩后得到......
  • LeetCode题练习与总结:反转字符串中的单词 Ⅲ -- 557
    一、题目描述给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入:s="Let'stakeLeetCodecontest"输出:"s'teLekatedoCteeLtsetnoc"示例2:输入:s="MrDing"输出:"rMgniD"提示:1<=s.length<=5*10^......