求详解。。。。
RT
{
char *str = "abc";
char strt[] = {'a','b','c'};
strcpy(str,"bac");
strcpy(strt,"bcda");
}
这段代码会带来什么问题?求详解。。。
我运行的时候直接停止工作,好像内存溢出了。。。 内存溢出 c c++
[解决办法]
1、str是常量指针,其内容不允许被改写,strcpy(str,"bac")会导致段错误;
2、strt的长度为3,strcpy(strt,"bcda")会越界,结果难料。
[解决办法]
char *str = "abc";
//这条语句实际是将"abc"这个常来那个字符串的地址赋值给str,
//让str这个char指针指向"abc"z这块区域的!
//常量字符串是保存在静态区的,内容是可读,不可写,也就是不能更改的!
//所以当你试图修改里面的内容的时候就会出现内存可读的不可写的错误的!
//第二个越界到没有,只是输出字符串的时候没有结束标志位'\0'了,没有停止输出
//导致后面输出越界
[解决办法]
str指向常量"abc"是不允许更改的,所以strcpy(str,"bac")是错的
strt[]只有3字节大小,结果你复制5字节过去,自然溢出了
[解决办法]
//第一个的内容怎么改 都不行的!因为它的内容不可修改,
//而且你说的那个改法本身也是错的!
//除非改源头了char *str = "abc";
char str[3] = "abc"; //或者malloc分配空间也行