This topic has been archived. It cannot be replied.
-
工作学习 / IT技术讨论 / 我定义了一个字符数组:char string[10]="asdf",no problem,但在程序中我想把它清空或者赋另外的值,怎么做呀? 如string="fgh",则会出错。
-volunteer(angel);
2004-11-26
(#2000958@0)
-
什么语言?
-labourg(虫虫-努力工作);
2004-11-26
(#2000959@0)
-
忘了说了,我是在c 语言环境下。
-volunteer(angel);
2004-11-26
(#2000960@0)
-
strcpy() strcat() 你应该找本C的语法书看看,这样东一个,西一个也不系统啊。
-luoboyang(萝卜秧);
2004-11-26
(#2000971@0)
-
赋值用memcpy, 清空用memset,也可以。看出来了,你以前没用过C。以后类似的问题会更多,不如直接把你的程序贴出来,看有没有人有兴趣帮你做。反正都是volunteer。或者你就先专心看看书吧。
-isup(isup);
2004-11-26
(#2000987@0)
-
小心memory fault喲。没申请的空间别用。别不小心把邻居的房子给拆了。
-647i(盲人协会);
2004-11-27
(#2001452@0)
-
写C的代码,关于数组越界,指针越界这样的问题,都要自己检查,没有什么特别好的办法。我就比较偏爱使用memcpy和memset。相对来说,C++就好得多了,用一个类封装起来,非常安全。
-isup(isup);
2004-11-27
(#2001583@0)
-
盲人协会 说到点上了!
-maer(马儿);
2004-11-27
(#2002025@0)
-
你这C也太那个了吧...一点都没有入门呢.
-tester(test);
2004-11-26
(#2000982@0)
-
问问题不是你这样问的, 你好歹也该把一本书先看完了再来啊.
-johnnyzh(bubble);
2004-11-26
(#2001000@0)
-
你看起来很像 BASIC 的受害者。定义 string[10]的时候,实际是在操作系统内申请了一段内存。 常量“fgh"无需定义,但编译器在编译的时候会发现它,也给她分配一段内存空间。好了,定义完了,开始执行。
“fgh"在一个表达式中代表它内存开始的指针。数组的名字也代表它内存的指针。这是 C 语言的规定。也是她没有字符串这种变量的原因。
你的程序中。 string = "fgh" 等于要把常量"fgh"的地址赋给 string 的地址,你说能不出错吗?
-aka(棒棒);
2004-11-26
{385}
(#2001037@0)
-
C语言没有string类型。string是用字符数组实现的。char *string
-647i(盲人协会);
2004-11-27
(#2001447@0)
-
对字符数组的访问是通过指针实现的。指针的类型其实是个int
-647i(盲人协会);
2004-11-27
(#2001448@0)
-
清空string[0]=0; 赋值strcpy(string,"fgh");别忘了在程序首部加上
#include<string.h>
-dts(独頭蒜※惜语如金);
2004-11-27
{40}
(#2001646@0)
-
你的问题当中,其实string是个指针,所以第二个赋值应该不会出错。楼上独頭蒜所做的是PASCAL的做法,不行。
-maer(马儿);
2004-11-27
(#2001671@0)
-
第二个赋值是不懂 C 语言的人经常犯的毛病。
-aka(棒棒);
2004-11-27
(#2001883@0)
-
第二个赋值是把常量 "fgh" 的地址赋给string,有的编译器如果使用默认开关将会给出警告信息,但不是错误信息。string所指向的字符串将会有7个是不可预测的,如果正好是控制字符,那么如果传输到标准CTR,系统可能崩溃。C语言是自由的,它并不认为这是错误,所以要求用户层次比较高。
-maer(马儿);
2004-11-27
{59}
(#2001909@0)
-
同时由于串常量 "asdf"的地址丢掉了,它也就成了所谓的“内存垃圾”,在高级程序设计当中,内存垃圾处理是很重要的环节。有些软件运行多次以后会造成死记,很大的一个原因就是垃圾处理不当。这跟操作系统也有一定关系,这领域我是专家。
-maer(马儿);
2004-11-27
(#2001931@0)
-
马兄不会是微软canada的职工吧@_@?
-fenfen(蝶儿漫天飞≈Ж≈);
2004-11-27
(#2001970@0)
-
我觉得他应该是做embedded的。
-linklist(小娥);
2004-11-27
(#2001979@0)
-
有7个是不能预测的??有意思。
-aka(棒棒);
2004-11-27
(#2001948@0)
-
YES,因为常量 "fgh" 在内存中的物理地址主要由操作系统决定。
-maer(马儿);
2004-11-27
(#2001959@0)
-
行,你是对的。但是,如果你非让string 改变成 "fgh"的地址,sting[4]应该是 \0, 我完全可以预测。
-aka(棒棒);
2004-11-27
(#2001967@0)
-
鸡蛋里挑骨头,sting[3]吧。我还是习惯用memcpy,memset。
-linklist(小娥);
2004-11-27
(#2001975@0)
-
小娥用函数算是个好习惯!不容易出错,但是会降低程序效率,高手一般不采用的。。
-maer(马儿);
2004-11-27
(#2001988@0)
-
我有自知之明,离高手还差得远呢。很多时候,如果不是非常low-level的东西,牺牲一下效率也就罢了。说吧,你是做driver的呢,还是做kernal的。
-linklist(小娥);
2004-11-27
(#2001996@0)
-
不管是做DRVIER的人还是做KERNAL的人,都是“斤斤计较”的!我们在这聊天,每敲入一个汉字,DRIVER和KERNAL不知要调用多少次!!!
-maer(马儿);
2004-11-27
(#2002012@0)
-
做Driver 的。
-aka(棒棒);
2004-11-27
(#2002021@0)
-
不知微软报酬如何?应该很高吧???好奇ING。。。。。。
-fenfen(蝶儿漫天飞≈Ж≈);
2004-11-27
(#2002030@0)
-
笑而不答 :)))))))
-maer(马儿);
2004-11-27
(#2002034@0)
-
嗯,说得对,只有这个字符可以预测。。。应该说有6个字符不可预测。谢谢!
-maer(马儿);
2004-11-27
(#2001980@0)
-
还有,独头蒜的做法好像没有毛病。
-aka(棒棒);
2004-11-27
(#2001985@0)
-
欧,是清空的方法不对。赋值没问题。
-aka(棒棒);
2004-11-27
(#2001993@0)
-
对啦!呵呵~~~
-maer(马儿);
2004-11-27
(#2002000@0)
-
毛病在前半句。
-maer(马儿);
2004-11-27
(#2001998@0)
-
string[0]='\0'就可以了。
-linklist(小娥);
2004-11-27
(#2002001@0)
-
鼓掌,邦邦邦~~~~
-maer(马儿);
2004-11-27
(#2002004@0)
-
大多数C编译器接受这种“错误”,它认为programmer故意这样做,C的自由就在于这!但是记住了:这个赋值导致的结果跟你的原意(操纵string等同于操纵 "fgh")是绝然不同的。
-maer(马儿);
2004-11-27
(#2001944@0)
-
推荐你看一本书,C Programming Language, 在industry里,这本书被人叫做K&R,因为作者的initial。这本书也被人叫做C bible,特别对初学者,非常有帮助。
-linklist(小娥);
2004-11-27
(#2001933@0)