主题:[讨论]麻烦:gets();如何使用?
LoveCsys
[专家分:0] 发布于 2011-01-20 02:14:00
…
char *a=0;
gets(a);
…我用borlandc3.1编译通过,但输入字符串时有时候出现 NULL POINTER ASSIGNMENTS,有时候正常。*a=0; a变量存有地址值吗?还是没有指向?a==NULL?gets(a);是找到地址a,从a开始输入字符串,如果赋值a任意地址应该就正常了吧?但是否会因输入字符串占用a后的字节覆盖有用数据产生错误?用a[10]或malloc能正常但浪费内存字节。有办法gets(a)不浪费内存字节又动态调整a的存放空间吗?
请大哥们帮我想想上面的问号?谢谢
回复列表 (共3个回复)
沙发
Chipset [专家分:16190] 发布于 2011-01-20 12:14:00
你把字符窜放到哪里啦?总得事先开辟空间吧。
在C里面没有你想要的那样的好事,除非你自己写一个比较复杂的代码段来做到。在C++里面你可以用getline读一行。
板凳
windy0will [专家分:2300] 发布于 2011-01-20 12:23:00
一般而言,0地址和NULL指针是一样的。NULL指针只能用来赋值和作比较,其他一切行为都是未定义的,产生的行为依赖于编译器的实现。或者说,用NULL指针来标记“这是一个特殊的地址,不能随便对它进行操作”。绝大多数编译器把这个特殊的地址设计成不可读不可写(有例外),如果程序却要访问或写这个地址,当然会出现读写违例。相应的,有些地址是只读的,不能对其进行写入数据。
如果您随便给一个指针赋值,当然也不行。如果那个地址不能写,而硬要执行写操作,又或者不能读,而硬要访问它,这些都会产生错误。定义一个变量,就会分配一块空间(一般是可读可写),以后就可以在这块空间对数据操作了。真是这个原因,指针一定要先指向一块可用空间,才能对指针指向的地方进行读或写操作。其他的指针一般没任何意义。
数据被覆盖不会出错,但很有可能造成溢出而成为bug.
3 楼
sabsa [专家分:0] 发布于 2011-01-25 12:00:00
At this [url=http://www.ccqdiy.com]重庆团购[/url] maximal rate of hate decay, the time taken for the warrior's threat to decay to 90% of the original value would be 26.5 hours. In fact, if a warrior logged in [url=http://www.mmopowerlevel.net/powerlist.php?fid=688]buy wow item[/url] as soon as the server came online after the weekly reset and hit a mob, his threat would not decay to 50% before the server reset next week. I think this is [url=http://www.mmopowerlevel.net/powerlist.php?fid=688]buy wow gear[/url] enough to rule out threat decay.
5) Threat values for some warrior abilities Updated Jan 20
The following list is not exhaustive, but [url=http://www.ccqdiy.com]重庆二手交易[/url] includes all the major tanking abilities.
Note: the following values [url=http://www.ccqdiy.com]重庆二手手机[/url] are given in raw terms. In reality the warrior must have either a 1.3 or 0.8 or 1.45 modifier on these, depending on his stance and talents.
Note: * All abilities do not include threat generated by their damage. This [url=http://www.ccqdiy.com]重庆二手电脑[/url] will be discussed more later.
我来回复