- 论坛徽章:
- 1
|
关于使用字符指针和字符数组的区别,以及strcpy越界的疑问
程序没有考虑目标字符串是否容纳得下源字符串,但编译通过,运行时也复制了想要的目标字符串,但源字符串的内容却被无端修改了,这是因为存储越界引起的吗? 你的目标没有分配空间.可以说是你的拷贝把源字符串给盖掉了,只是因为源目标字符串是挨在一起的,但这是不确定的.而你对只读内存进行写本来就是错的.所以你的程序是错的.
程序编译通过,运行后,目标字符串得到了想要的复制,源字符串也没有被无端修改,但是coredump了。
在这两个程序中,程序运行的表现显然是不一样的,那么定义字符数组和字符指针有什么区别呢?请大家指点一下!:)
因为你复制了比你的数组分配的栈空间更多的字符.所以溢出了,就像你定义一个数组是int a[10],你在程序中却用a[10] = 100;这样....所以会core掉了.
字符数组: char carr[]="abc";把字符串"abc"复制到栈上由carr指向的.
字符指针: char *pc = "abc"; 这里"abc"是在存在于只读内存上,pc指向它而矣.正确的写法是const char *pc = "abc"; |
|