- 论坛徽章:
- 0
|
原帖由 封神 于 2007-7-30 16:28 发表
问1,作为一个字符串,是否有长度的限制?最长能有多长
问2,如果我定义了一个字串指针 char *p; 那么在我将一个超常的字串拷贝给它的时候,用没有可能覆盖调内存空间中其他变量的值。
问3,为了避免问2的 ...
1.当然有长度的限制, 长度的限制视具体的机器而定. 如果是堆上分配的空间的话, 一般不能大于2G. 至于栈上的, 我没有试过, 没有发言权, 但是肯定有限制.
2.首先如果你已经定义好了, 那么它的地址就确定了. 你拷贝给它的时候, 是在它合法的地址空间之内的. 当然不会覆盖其它变量的值. 但是如果你的长度很长的话,不见得你就能够分配成功.当然,如果你要赋给这个字符串的长度超过了它本来的长度,当然会覆盖掉其它的值.80年代著名的蠕虫病毒就是根据gets()这个函数来实现缓冲区溢出,然后进行攻击的.
3.char *p = (char*)malloc(sizeof(str_list));
需要将这个地址强制转换成char*指针. 至于后面的sizeof()的结果,只是一个长度而已.
4.不是很明白你的意思.
5.这是小弟的看法,如果有错误,请大家指正.谢谢. |
|