社区
C语言
帖子详情
用memset()给字符串指针赋值的问题
sunnycrystal_2008
2008-05-08 09:59:00
我写了这样一段代码:
unsigned char *tt;(tt已经被分配了一段内存空间,长度为len, 且值为0)
memset(tt, 0, len);
编译时没错,但是程序运行到memset函数时就崩了,这是为什么呢?难道memset不能给已经是“0”的字符串再清空?
...全文
1361
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没有初始化!只初始化了结构体的指针
wKernel
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)
包含string对象的结构与
memset
初始化操作
memset
初始化std::string对象时,按字节顺序将std::string对象所在空间清零,破坏了std::string对象的成员结构,使Myroxy
指针
资源变为野
指针
,操作其迭代器会出现不可预知的异常,在存储
字符串
时可能分配了不必要的内存空间,并且还导致这些内存不能被释放。 回到
memset
函数,它设计的初衷是对结构资源连续的空间进行
赋值
操作,而对于较为复杂和抽象的类型,包括我们自定义的各种业务类型,这些类型中可能存在多层继承关系,那么这些结构资源中就隐藏着虚函数表、虚
指针
,对于多层聚合、组合的类型也会存在自定义类型的
指针
对象,这些资源都可能不是连续的空间去存储,如果使用
memset
去初始化这类资源,自然是违背了
memset
设计初衷,导致程序出现不可预知的异常。 除了
memset
函数外,在使用memcpy、_memccpy、memove这些函数操作上述的资源时,也需要注意类似的异常发生。
c语言高效编程,编写高效简洁的C 语言代码,
编写高效简洁的C 语言代码,是许多软件工程师追求的目标。本文就工 作中的一些体会和经验做相关的阐述,不对的地方请各位指教。 第一招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发 逆向思维来考虑程序的效率
问题
,我们就有了解决
问题
的第1招--以空间换时间。 例如:
字符串
的
赋值
。 方法A:通常的办法: #define LEN 32 char string1 [LEN];
memset
(string1,0,LEN); strcpy (string1,"This is a example!!"); 方法B: const char string2[LEN] ="This is a example!"; char * cp; cp = string2 ; 使用的时候可以直接用
指针
来操作。 从上面的例子可以看出,A 和B 的效率是不能比的。在同样的存储空间 下,B 直接使用
指针
就可以操作了,而A 需要调用两个字符函数才能完成。B 的 缺点在于灵活性没有A 好。在需要频繁更改一个字符
C语言:数组
赋值
字符串
,
指针
赋值
字符串
需要malloc给空间,初始化
memset
(常常纠结,入门级)
直接定义
赋值
都是没有
问题
的,正确的。但是,数组,
指针
都是定义了之后再
赋值
则有规则。 目录 1.数组可以直接定义
赋值
字符串
。如char str[128] = "dasdasdasda"; 此时的访问可以用
字符串
的占位符%s ,也可以用数组的 for( ) 循环访问。 2.给(数组)定义后再
赋值
字符串
。此时要用拷贝函数strcpy( )。 3.直接给
指针
赋值
字符串
。 4.先定义一个
指针
(也叫野
指针
,没有指向的空间),再
赋值
字符串
。此时需要给
指针
先malloc给空间,让
指针
指向这个malloc开辟的空.
oracle 给空值
赋值
,
字符串
赋值
为空_
字符串
赋值
定义一个串类CMyString,建立适当的构造函数
字符串
使用
指针
保存
字符串
必须实现如下操作,
字符串
比较、求串的长度、判断串是否为空、将串置空、
字符串
赋值
(包括两个字符如果是
指针
字符串
,可以直接给
字符串
赋值
为NULL,如果不是
指针
字符串
的话,没必要初始化,因为他们用完后就自动释放内存空间了。 还能输入1000个字符
字符串
的定义与
赋值
而
字符串
的零位正是它的长度,如s[0]=10(※上述功能Ansis...
字符数组
赋值
,以及
memset
用法注意
1,字符数组
赋值
char a[10]; 怎么给这个数组
赋值
呢? 1、定义的时候直接用
字符串
赋值
char a[10]="hello"; 注意:不能先定义再给它
赋值
,如char a[10]; a[10]="hello";这样是错误的! 2、对数组中字符逐个
赋值
char a[10]={'h','e','l','l','o'}; 3、利用strcpy char a[10]; str
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章