社区
C语言
帖子详情
用memset()给字符串指针赋值的问题
sunnycrystal_2008
2008-05-08 09:59:00
我写了这样一段代码:
unsigned char *tt;(tt已经被分配了一段内存空间,长度为len, 且值为0)
memset(tt, 0, len);
编译时没错,但是程序运行到memset函数时就崩了,这是为什么呢?难道memset不能给已经是“0”的字符串再清空?
...全文
1449
54
打赏
收藏
用memset()给字符串指针赋值的问题
我写了这样一段代码: unsigned char *tt;(tt已经被分配了一段内存空间,长度为len, 且值为0) memset(tt, 0, len); 编译时没错,但是程序运行到memset函数时就崩了,这是为什么呢?难道memset不能给已经是“0”的字符串再清空?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
54 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
skyctr
2009-04-20
打赏
举报
回复
留名,学习
茻鄷
2008-05-12
打赏
举报
回复
tt指向name,但是name没有初始化!只初始化了结构体的指针
汪岩的爸爸
2008-05-12
打赏
举报
回复
memset没有问题,我一直那么初始化,我认为是你没有给tt申请空间。
sunnycrystal_2008
2008-05-11
打赏
举报
回复
谢谢有这么多热心的人帮助,我按照大家的说法做了一下,确实是这个问题,我的分数就给最先给我答案的人了,其它的人就不好意思了,呵呵!以后继续向大家学习!!!
bbplayers
2008-05-11
打赏
举报
回复
tt指向name,但是name没有初始化!
WindBoy1987
2008-05-11
打赏
举报
回复
[Quote=引用 29 楼 Chiyer 的回复:]
C/C++ code
改法1
#include "stdlib.h"
typedef struct
{
unsigned char Name[32];
bool Need;
bool NeedBuf;
int Type;
}DEF_PARAM, *PRT_DEF_PARAM;
int main() {
PRT_DEF_PARAM dd;
unsigned char *tt;
dd = (PRT_DEF_PARAM )malloc(sizeof(DEF_PARAM));
memset(dd, 0, sizeof(DEF_PARAM));
return 0;
}
改法2
#include "stdlib.h"…
[/Quote]
这也解决不了吗?
kingmax54212008
2008-05-11
打赏
举报
回复
学习了。呵呵~~~
svnware
2008-05-10
打赏
举报
回复
路过看看,楼上的朋友们已经解释的很清楚了!
laowang2
2008-05-10
打赏
举报
回复
up
geldqb
2008-05-10
打赏
举报
回复
tt = dd->Name;
没有给dd->Name分配空间.
dd->Name是一个野指针.
qinqinhao
2008-05-10
打赏
举报
回复
up
帅得不敢出门
2008-05-10
打赏
举报
回复
[Quote=引用 31 楼 dingguobin 的回复:]
应该注意:malloc是的4096确实不妥 sizeof更合理
dd = (PRT_DEF_PARAM )malloc(4096);
这个只是指向结构体的指针,在你的结构体里还有Name 这个指针.
你没有给name分配空间,所以会崩溃.
[/Quote]
关键在于这个name无空间 你怎么操作
browningblue
2008-05-10
打赏
举报
回复
you don't allocate memory for Name.
ribut9225
2008-05-10
打赏
举报
回复
楼主可以结帐了
jiaohhp
2008-05-10
打赏
举报
回复
同意。
就是name没有分配空间!
yueyeli
2008-05-10
打赏
举报
回复
你自己的错!memset没有错
red_berries
2008-05-10
打赏
举报
回复
[Quote=引用 18 楼 Treazy 的回复:]
以后就直接点,把代码帖出来
找问题方便多了
连空间都没分配还说已经分配了
瞎猜有啥猜的
[/Quote]
tujie1899
2008-05-10
打赏
举报
回复
呵呵,又是指针的老套路了!
用指针小心点!!
奔跑哥
2008-05-09
打赏
举报
回复
但是在用memset的时候最后一个参数应该是 sizeof(type) × len吧
奔跑哥
2008-05-09
打赏
举报
回复
哦,看错了,不对。len 对着。
加载更多回复(32)
C语言:数组
赋值
字符串
,
指针
赋值
字符串
需要malloc给空间,初始化
memset
(常常纠结,入门级)
直接定义
赋值
都是没有
问题
的,正确的。但是,数组,
指针
都是定义了之后再
赋值
则有规则。 目录 1.数组可以直接定义
赋值
字符串
。如char str[128] = "dasdasdasda"; 此时的访问可以用
字符串
的占位符%s ,也可以用数组的 for( ) 循环访问。 2.给(数组)定义后再
赋值
字符串
。此时要用拷贝函数strcpy( )。 3.直接给
指针
赋值
字符串
。 4.先定义一个
指针
(也叫野
指针
,没有指向的空间),再
赋值
字符串
。此时需要给
指针
先malloc给空间,让
指针
指向这个malloc开辟的空.
C语言
memset
()函数详解
传递时,每个字节都将被设置为该值的低字节。如果要给整型数组
赋值
,建议使用循环遍历数组并逐个为数组元素
赋值
的方式,以确保每个数组元素都被正确设置。通过指定要设置的值,可以灵活地将其应用于不同类型的数据结构和内存块。函数时要保证操作的内存块有效并且足够大,以避免访问非法内存区域或导致缓冲区溢出等
问题
。是一个 C 语言中的库函数,用于将指定的内存块设置为指定的值。函数的主要功能是将指定的内存块的每个字节设置为给定的值。需要注意的是,我们传递的是结构体变量的地址(的所有元素设置为 0。的所有元素设置为 10。
memset
函数及其用法,C语言
memset
函数详解
定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。 每种类型的变量都有各自的初始化方法,
memset
() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为: include <string.h> void *
memset
(void *s, int c, unsigned long n); 函数的
memset
()相关使用
1、
memset
函数及其用法 每种类型的变量都有各自的初始化方法,
memset
() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。 它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为: # include <string.h> void *
memset
(void *s, int c, unsigned long n); 函数的功能是: 将
指针
变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是
oracle 给空值
赋值
,
字符串
赋值
为空_
字符串
赋值
定义一个串类CMyString,建立适当的构造函数
字符串
使用
指针
保存
字符串
必须实现如下操作,
字符串
比较、求串的长度、判断串是否为空、将串置空、
字符串
赋值
(包括两个字符如果是
指针
字符串
,可以直接给
字符串
赋值
为NULL,如果不是
指针
字符串
的话,没必要初始化,因为他们用完后就自动释放内存空间了。 还能输入1000个字符
字符串
的定义与
赋值
而
字符串
的零位正是它的长度,如s[0]=10(※上述功能Ansis...
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章