字符指针问题
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = '\0';
strcpy( pStr, tmp );
}
char *b="123456";
LoopMove(b,1);
为什么会编译出错
test.exe 中的 0x1026f689 (msvcr90d.dll) 处未处理的异常: 0xC0000005: 写入位置 0x00416868 时发生访问冲突
作者: lt724123lt123 发布时间: 2011-06-16
作者: q191201771 发布时间: 2011-06-16
===》》
char b[] = "123456";
试一试。
作者: healer_kx 发布时间: 2011-06-16
LoopMove(b,1);
常量字符串不可以修改
作者: dizuo 发布时间: 2011-06-16
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = '\0';
strcpy( pStr, tmp ); // 你函数这里修改了pStr
}
作者: dizuo 发布时间: 2011-06-16
改成
char b[]="123456";就行了
作者: luciferisnotsatan 发布时间: 2011-06-16
等于
const char *b="123456";
作者: shi3590 发布时间: 2011-06-16
"123456" 这个是字符串常量,只读的。char *只是指向这个常量
改成
char b[]="123456";就行了
Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted.
这是怎么回事
作者: lt724123lt123 发布时间: 2011-06-16
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
作者: zhao4zhong1 发布时间: 2011-06-16
引用 5 楼 luciferisnotsatan 的回复:
"123456" 这个是字符串常量,只读的。char *只是指向这个常量
改成
char b[]="123456";就行了
Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted.
这是怎么回事
char tmp[MAX_LEN];
改为
static char tmp[MAX_LEN];
将可能比较大的数组从堆栈挪到全局内存区分配。
作者: zhao4zhong1 发布时间: 2011-06-16
作者: pachonghanya 发布时间: 2011-06-16