memset清空数组(在c语言中怎么样清空数组)

本文目录
- 在c语言中怎么样清空数组
- 如何清空结构体数组
- c语言数组怎么清零
- 清空数组可以用memset函数吗如果可以的话怎么用啊麻烦用C++讲一下,谢谢
- memset清空的问题,本身第一个参数定义的就是数组,为什么写到memset中的时候还要在前面加“&”,如下
- 怎么把用完的数组清空
- 有人知道c++将一个数组全部清零的命令是什么吗
在c语言中怎么样清空数组
堆上申请(也就是C++中new出来的)的就,需要自己手动释放内存(free,C++中是delete
数组名):
memset(变量地址,0x00,大小);
栈上申请的,就是函数执行完就会自动释放的
数组名
=
{0};
如何清空结构体数组
你要清空,我一般都不用什么函数,我会是用一个标识符flag。。。。
struct st_r
{
’’’’’’’’
’’’’’’’’
int flag;
}
str_r st;
这个用法比较简单,当数组的该元素表示存在的时候,flag=1,该元素不存在的时候,flag=0。。。。
如果你对这个用法有什么问题,可以密我,困啊,要去睡觉了。。。。
c语言数组怎么清零
c语言不能对这个数组赋值,只能通过遍历数组达到给数组中每个元素赋值的目的。初始化的时候可以用inta={0};这样给整个数组元素赋值为0,若想给已初始化的数组清零,也只能遍历数组。
在C语言中,所谓的“清空”,意思是“无视里面的数据”,而不是“让里面没有数据”。有时候可能需要把一个数组清零,意思是全部数据都用0填充,可以用库函数来实现。假设数组名为a,无论什么类型也无论几维都一样,可以写成memset(a,0,sizeof(a));
扩展资料:
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持,但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了。
参考资料来源:百度百科-数组
清空数组可以用memset函数吗如果可以的话怎么用啊麻烦用C++讲一下,谢谢
是一个局部数组,局部变量是保存在堆栈里面的,空间是在运行时分配的,程序执行到这里时,根据 n 值的大小,调整堆栈指针 esp 来分配空间,子程序返回的时候,再让这些空间出栈,这是一个完全动态的过程,所以 n 可以是一个变量。除非 lib 是个全局数组,大小才需要在编译期间确定好。
但是堆栈的空间毕竟是不大的,因此这种做法并不推崇,如果遇到 n 很大的情况,lib[n] 就是一个很大的数组,保存在堆栈里面极有可能造成栈溢出,提交到 OJ 上就会返回莫名其妙的 runtime error,所以一般来说数组还是建议都定义成全局的。
这个题目,首先楼主你的算法是错误的,题目说了:加密算法是保持单词首尾两个字母不变,中间的字母顺序打乱,但是在你的判断语句中
if(length2[m]==length1[j])
if(word==lib[j])
if(word[(length2[m]-1)]==lib[j][(length2[m]-1)])
cout《《lib[j];
只判断了
1. 长度相等
2. 首字母一样
3. 尾字母一样
而并没有考虑中间的字母,也就是说,对于你这个算法,完全有可能把比如 asker 当成是对 after 的加密,但其实两者是不同的单词,因为 ske 和 fte 里的字母再怎么改变顺序也不可能相同。所以除了上面3个条件的判断之外,你还应该考虑单词中间的字母是否匹配,常规的做法是将两者中间的字母都拿出来,构成两个列表,然后分别排序,再一一比较。
代码方面,还有一处比较严重的错误在这一句:
memset(word,0,21);
因为根据你的定义,word这个数组事实上只有19个字节,但是你 memset 却清空了连续 21 个字节的内容,结果就是造成 word 数组以外的变量也被清掉了,这里应该改成
memset(word,0,sizeof(word)); // 应该是用 sizeof 来计算数组大小
而且 word 这个数组定义成 19 字节也是不对的,因为题目中说了最长的单词最长可能有 20 个字符,加上最末端的 ’\0’,你应该给 word 分配 21 个字节的空间,才能保证读入的单词能够存下。
另外,逻辑上讲,其实你程序里面这个 word 数组是根本没有必要清空的。
最后帮楼主修改了一下程序:
#include《cstring》
#include《iostream》
#include《string》
using namespace std;
// 补充一个函数,检查从 s1 和 s2 开始,长度为 len 的两个字符串,
// 其中一个是否为另一个打乱字母顺序的结果。
bool check(char *s1, char *s2, int len) {
int cnt = ;
for (int i = 0; i 《 len; i++) {
cnt[s1[i]-’a’]++; cnt[s2[i]-’a’]--;
}
for (int i = 0; i 《 26; i++)
if (cnt[i]) return 0;
return 1;
}
int main(){
int n;
cin》》n;
char lib[n]; // 单词最长为20,数组大小改为21
char word;
char no;
int length1[n];
int length2;
for(int i=0;i《n;i++){
cin》》lib[i];
length1[i]=strlen(lib[i]);
}
for(int m=0;m《501;m++){
cin》》word;
no=cin.get();
length2[m]=strlen(word);
if(length2[m]》2){
for(int j=0;j《n;j++){
if(length2[m]==length1[j])
if(word==lib[j])
if(word[(length2[m]-1)]==lib[j][(length2[m]-1)])
if (check(word+1, lib[j]+1, length2[m]-2)) // 这里补充检查单词中间的字母
cout《《lib[j];
}
}
else
cout《《word;
if (no==’\n’)
cout《《endl;
else if (no != EOF) // 避免输入结束后继续输出多余的空格(否则会PE)
cout《《“ “;
memset(word,0,sizeof(word)); // 改成 sizeof(word)
}
return 0;
}
楼主的算法时间复杂度是 O(m*n*L) 的,并不是很优,可以考虑通过哈希表等方法降低到接近 O(m+n),不过对于这题的数据规模,前面的算法已经可以通过了。
memset清空的问题,本身第一个参数定义的就是数组,为什么写到memset中的时候还要在前面加“&”,如下
char g_chHost_DB[MAX_HOST] = “127.0.0.1“; 定义一个字符数组 数组名就是首地址
memset(g_chHost_DB,0,sizeof(g_chHost_DB)) 所以,这里可以不加&
怎么把用完的数组清空
有两种方法可以实现。
为方便说明,定义整型数组a,并实现将a清空。
int a = {1,2,3,4};
1、 通过数组遍历,逐个赋值为0。
定义循环变量int i;
for(i = 0; i 《 4; i ++)
a[i]=0;
该程序功能为遍历数组a,逐个将元素赋值为0,实现清空效果。
2、 借助内存赋值函数memset,整体赋值为0。
void *memset(void *dst, int value, size_t size);
这个函数的功能为将src上,大小为size字节的数据赋值为value。需要注意的是,该函数赋值是以字节为单位的。
调用该函数时需要引用头文件string.h,即
#include 《string.h》
清空数组的代码为
memset(a,0,sizeof(a));
有人知道c++将一个数组全部清零的命令是什么吗
c++将一个数组全部清零的命令是memset。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
memset()函数原型是externvoid*memset(void*buffer,intc,intcount)buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度。
扩展资料
memset实例
#include《iostream》
#include《cstring》
usingnamespacestd;
intmain()
{
charbuffer=“Helloworld\n“;
cout《《“Bufferbeforememset:“《《buffer《《endl;
memset(buffer,’*’,strlen(buffer));
cout《《“Bufferaftermemset:“《《buffer《《endl;
return0;
}

更多文章:
dropdownlist 绑定(DropDownList 绑定所有项 并 显示指定项)
2026年10月11日 08:50
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00






