为什么memset不能将数组元素初始化为1?

为什么memset只能赋值为0或-1 问题引出 当我们运行下面的一段代码试图将数组中的数字全置为1: #include<bits/stdc++.h> using namespace std; int main() { int arr[5],b; memset(arr,1,sizeof(arr)); for(auto i:arr) cout<<i<<" "; } 会发现结果为:16843009 16843009 16843009 16843009 16843009 为什么结果会与我们预期不符? 原 阅读详情

今天笔者发现了一个很严肃的问题

memset函数不能给数组赋值为1
查阅资料后发现,memset函数是逐个字节填充,计算机中为补码,memset函数只能填充为全0或者全1。

说明,memset函数只能给数组赋值全0,或者全-1.

#include<string.h>
int main(){
	int a[101];
	memset(a,1,sizeof(a));
	for(int i=1;i<=100;i++)
		cout<<a[i]<<endl;
	return 0;
}

笔者发现打印出来的不是全1,而是不为0的正整数(16843009)!

在这里插入图片描述

具体详解见博客:
https://www.cnblogs.com/blogofwu/p/4140563.html

Coursera 学习记录:为什么memset无法将二维整型数组全部赋值为1?以及如何解决! 比如,你想给一个二维整型数组初始化赋值为1,或者其他特定值,并且,你知道要用memset来赋值,于是你就这样写了: #include &lt;iostream&gt; #include &lt;cstring&gt; int main(){ int num[10][10]; memset(num, 1, sizeof(num)); } 你很得意地想要继续,结果,当你循环打印出数组进行判断... 阅读详情

相关推荐

memset不能将数组元素初始化为1的原因

memset是一个字节一个字节的设置,把一个int的每个字节都设置为1,也就是0x01010101,(十六进制1位是二进制4位,两位是二进制8位,是1字节)十进制就是16843009 memset是以字节为单位,进行初始化 当初始化char类型数组 初始化多少都可以 char data[10]; memset(data,0,sizeof(data)); // right memset(...

weixin_45672677的博客 720

memset初始化详解

参考文档 Function void * memset ( void * ptr, int value, size_t num ); Fill block of memory Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted ...

i逆天耗子 6127

C语言 memset函数

memset函数用来给数组的每一个元素赋相同的值。 建议只赋值为0或者1,因为memset按字节赋值,0的二进制补码全是0 , -1的二进制补码全是1,不会出错。 需要包含头文件:string.h #include <stdio.h> #include <string.h> int main() { int a[5] = { 1,2,4,3,3 }; //memset(a, 1, sizeof(a)); // 全赋值为1,输出时数组结果不对哦 //m...

smiledawen的博客 2304

深度学习:STGCN学习笔记

目录标题基于图神经网络的图分类问题GCN在行为识别领域的应用主要任务研究思路ST-GCN(SpatialTemporal Graph Convolutional Networks for Skeleton-Based Action Recognition)解读原论文解决问题主要贡献核心思想简介OpenPose 预处理基于人体关键点构造graph构造单帧graph(空间域)构造帧间graph(时间域)ST-GCN模型采样函数权重函数空域图卷积空间-时间模型分区策略可学习的边重要性权重TCNST-GCN模型的实

zhe470719的博客 3万+

Windows下Colmap编译安装全攻略:从Boost到CUDA的避坑指南

本文详细介绍了在Windows系统下编译安装Colmap三维重建工具的完整流程与实战经验。针对Boost库版本兼容性、CUDA与Visual Studio的版本匹配等常见难题提供了具体的避坑指南和解决方案,帮助开发者高效完成从环境配置到最终部署的全过程。

weixin_28235513的博客 198

为什么memset不能将数组元素初始化为1

来自点击打开链接.byhang问题代码:#include <stdio.h>#include <string.h>int main() { int array[5...

拔剑四顾心茫然的博客 426

保姆级教程:用OpenCV和MediaPipe在Python里实现实时手势识别(附完整代码)

本文提供了一份详细的Python教程,教你如何使用OpenCV和MediaPipe实现实时手势识别系统。从环境配置、手部关键点检测到手势分类算法,逐步讲解如何构建高精度手势识别应用,适用于智能家居控制、PPT操作等场景。教程包含完整代码示例和性能优化技巧,特别适合计算机视觉初学者和开发者实践。

weixin_28677005的博客 327

为什么memset不能将数组元素初始化为1?(急)

在C++中 memset() 可以将数组每个元素初始化为-1 0 false true 这个我们经常用,是可以的,但是昨天将数组元素初始化为1 就出错了。全部变成了168009!不知道是怎么一回事?大虾们能否给指点迷津? 很简单memset是一个字节一个字节的设置,把一个int的每个字节都设置为1,也就是0x01010101,十进制就是16843009 前段项目中发现一个问题,程序总是

PengPengBlog的博客 7025

【数据集处理】DroneVehicle数据集处理方法

DroneVehicle数据集由无人机采集的56,878张图像组成,其中一半是RGB图像,其余为红外图像。作者为这五个类别制作了带有定向边界框的丰富注释。

qq_44102942的博客 5046

Vite 任意文件读取漏洞复现(CVE-2026-39363)

Vite开发服务器 WebSocket中的fetchModule方法未实施server.fs访问控制,导致攻击者可通过WebSocket连接并读取服务器上的任意文件(CVE-2026-39363)

iSee857的博客 220

c语言定义不定长数组初始化_C语言数组初始化的三种方式

1、{0} 初始化int arr1[3] = {0};使用 {0} 的方式最简洁,一般在定义的时候使用。2、for 循环初始化int arr2[3];for (int i = 0; i < 3; i++) {arr2[i] = i;}使用 for 循环的好处是:可以将每个元素设为不同的值。3、memset 函数memset 函数声明为:void *memset(void *str, int ...

weixin_39640221的博客 2266

c 初始化char**_C语言数组初始化的三种方式

1、{0} 初始化int arr1[3] = {0};使用 {0} 的方式最简洁,一般在定义的时候使用。2、for 循环初始化int arr2[3];for (int i = 0; i < 3; i++) { arr2[i] = i;}使用 for 循环的好处是:可以将每个元素设为不同的值。3、memset 函数memset 函数声明为:void *memset(void *str, ...

weixin_35500243的博客 2743

基于ESP32的智能无线广播系统开发博客

通过本项目的开发,我们成功地实现了基于ESP32的智能无线广播系统。该系统不仅具备传统广播的功能,还实现了通过Wi-Fi无线传输音频、实时广播和智能控制等多种先进功能。未来,随着技术的进一步发展,我们还可以扩展更多功能,如智能推荐广播内容、支持语音识别和控制等。希望本项目能够为嵌入式开发人员提供一些思路和参考,帮助大家在实际开发中更好地应用ESP32平台,开发出更加智能和实用的无线广播系统。

2201_76125393的博客 423

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3985

memset的易错点

memset的作用一般就是用来初始化数组例如用来将a数组全部归零 memset(a,0,sizeof a)或者全部为无穷大memset(a,0x3f,sizeof a), **这个虽然好用但很容易错,而且一般都不会往这里想,血的记忆 **

qq_63050508的博客 432

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

一维数组的初始化问题

参考了: http://bbs.youkuaiyun.com/topics/310136813 http://blog.youkuaiyun.com/sibylle/article/details/2026915 一. 数组可以用一个初始列表值来初始化,如下所示: [cpp] view plaincopyprint? int array1[] = 

zhuimin的专栏 794

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

关于memset函数初始化数组的“坑”

我们知道,memset函数可以用来把一整块内存全部初始化,一般常用于数组。请看下面的代码 我们定义了一个大小为5的int型数组,意在把数组中的每一个元素都初始化为1。 #define _CRT_SECURE_NO_WARNINGS 1 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; //初始化...

melody_1016的博客 8013

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

int数组为什么一般不能用memset初始化每个元素

对于整数型数组,若要是初始化为非0的值时应该使用for循环 而对于字符型 或 0  应该使用memset 函数 如下是可以的,能把数组中的元素值都设置成字符1, #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main() { char a[5]; memset(a,'1'...

qq1169091731的博客 7597

C++:用memset初始化数组

1、初始化数组 定义完数组之后有三种初始化方式 int A[20]={0}; int A[20]; for(i=0;i<sizeof(A)/A[0];i++) A[i]=0; int A[20]; memset(A, 0, sizeof(A)); 此外对于全局变量和静态变量在定义之后会由编译器自动初始化为0 2、关于memset初始化与赋值问题 memset是C/C++提供的函数初始化函...

dashumak的博客 2万+

使用memset()函数初始化二维数组

【注意事项】 1.二维整型数组直接利用 memset() 函数初始化时,只能初始化为 0 或 -1 ,否则将会被设为随机值。 2.二维 char 型数组利用 memset() 函数初始化时不受限制,可以初始化任意字符。 二维整型数组 #include<stdio.h> #include<string.h> int main() { int a[10][10]; memset(a,0,sizeof(a)); for(int i = 0;i < 10;i++) { fo

qq_53269459的博客 2万+

[原创]使用memset初始化数组为-1或…

相信很多人使用过memset来初始化数组为-1或0。 这时候数组元素正好是-1或0。 今天看了memset的效率问题后,才想起这是个恰巧。 之前一直以为memset是对每个元素赋值,而实际不是的。 百度百科中的memset: void *memset(void *s, int ch, size_t n); 将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大

Never too late! 6400

memset初始化数组易错点

memset(a, 1, sizeof a); 如下代码,不少同学会以为a[]被初始化为1,其实不是的,是被初始化为16843009,为什么是这个数呢? #include <bits/stdc++.h> using namespace std; int n, a[14]; int main() { memset(a, 1, sizeof a); for(int i=0; i<14; ++i){ cout << a[i] << endl; } ret

ypeijasd的专栏 1279

使用memset初始化数组

写在前面的ATTENTION:用memset初始化非char型(eg. int型、float型…)数组时,假如初始化值非0,可能导致错误的结果。 先举个通常用法的栗子, 将int型数组arr的元素初始化为0: int arr[5]; memset(arr, 0, sizeof(int) * 5); 假如初始值不为0,会如何呢?例如设置为1: 使用memset(arr, 1, sizeof(int...

随便写写 3733
上一篇: C++排序与sort
下一篇: 蓝桥杯——进制转换练习
practical_sharp
博客等级 码龄8年 499粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值