内存字符串有关问题

news/2025/1/20 14:41:13/文章来源:https://www.cnblogs.com/LJianYu/p/18681345

问题一:

#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; //输出结果为 //24return 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所指向的内存区域是静态存储区。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872165.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NS3环境配置:NetAnim工具:通用安装

在NS3中需要使用进行网络可视化,其中工具NetAnim是官网源代码中所带工具: 编译NetAnim工具:cd netanim-3.109/ make clean qmake NetAnim.pro make 运行Netanim工具:cd netanim-3.109/ ./NetAnim 以上步骤通用于所有Netanim版本的安装

超大体积文本的快速打开查询EmEditor

前言 无法用grep精确查找日志内容的情况下,我会选择将日志文件拉到本地用文本编辑器打开查找关键信息 但有时候需要查看上百MB的日志文件,我们用常规的VsCode或者记事本打开容易出现卡死的问题 (据说win11的记事本倒是解决了这个问题) EmEditor 推荐使用EmEditor这个软件,…

请使用纯js实现一个横向或纵向的无缝滚动效果

以下是一个使用纯JavaScript实现的简单无缝滚动效果的示例。这个例子是横向滚动的,但你可以通过修改CSS和JavaScript中的某些部分来轻松实现纵向滚动。 HTML: <div id="scrollContainer"><div id="scrollContent"><img src="image1.j…

注解开发 -2025/1/19

纯注解开发bean管理 知识点1:@Autowired名称 @Autowired类型 属性注解 或 方法注解(了解) 或 方法形参注解(了解)位置 属性定义上方 或 标准set方法上方 或 类set方法上方 或 方法形参前面作用 为引用类型属性设置值属性 required:true/false,定义该属性是否允…

CTFshow-Web入门模块-爆破-web23

CTFshow-Web入门模块-爆破-web23题目源码 php代码爆破 <?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-03 11:43:51 # @Last Modified by: h1xa # @Last Modified time: 2020-09-03 11:56:11 # @email: h1xa@ctfer.com # @link: https://ctfer.com…

prometheus安装及使用

Prometheus 架构图环境准备: 10.0.0.31 prometheus-server31 2 core 2GB+10.0.0.32 prometheus-server32 1 core 1GB+10.0.0.33 prometheus-server331 core 1GB+10.0.0.41 node-exporter41 1 core 1GB+10.0.0.42 node-exporter42 1 core 1GB+10.0.0.43 node-exporter431 core 1…

【SQL Server】Service Broker——在单个数据库建完成对话

一般来说,在SQL Server中调用存储过程,是同步的。如果一个操作比较长,那么我们我们希望执行异步操作。 消息队列概念 。消息队列在SQL Server李,是一种存储消息的结构。消息生产者将消息发送到队列中,而消息消费者则从队列中读取并处理消息。这种机制实现了应用程序组件之…

uos 开发笔记

version GLIBCXX_3.4.26 not found的问题解决 一查看是否有这个库/lib64/libstdc++.so.6 二查看这个库/lib64/libstdc++.so.6中的的GLIBCXX的支持的版本 经查看是环境里已经有这个库,并且是个软连接,软连接到libstdc++.so.6.0.19查看这个库/lib64/libstdc++.so.6中的的GLIBC…

C#/.NET/.NET Core技术前沿周刊 | 第 22 期(2025年1.13-1.19)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

映射注入

一、前言 在所有先前的实现中,私有内存类型都用于在执行期间存储有效负载。私有内存是使用 VirtualAlloc 或 VirtualAllocEx 分配的,如下图所示可以看到内存类型属于Private二、映射内存注入 分配私有内存的过程因被恶意软件广泛使用而受到安全解决方案的高度监控。为了避免使…

攀高行为检测识别摄像机

攀高行为检测识别摄像机具有高清晰度和远程监控功能。通过高清晰度的摄像头捕捉到工作人员在高空作业中的实时图像,并通过远程监控系统进行数据传输和处理。管理人员可以随时随地查看工作人员的操作情况,及时发现异常行为并采取相应措施。攀高行为检测识别摄像机支持多种智能…

升降梯人数统计识别摄像机

升降梯人数统计识别摄像机具有高效的图像识别功能。通过高清晰度的摄像头捕捉到升降梯内乘客的图像,并通过图像识别技术进行快速准确的人数统计。并通过智能算法对数据进行融合分析。通过多源数据融合分析,可以更加全面准确地评估升降梯内乘客流量情况。升降梯人数统计识别摄…