字符指针问题

void LoopMove ( char *pStr, int steps )
{
 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

实参b 形参pStr指向的"123456"为只读 不可修改

作者: q191201771   发布时间: 2011-06-16

char *b="123456";


===》》

char b[] = "123456";

试一试。

作者: healer_kx   发布时间: 2011-06-16

char b[] = "123456"; //改成数组或者malloc申请内存。
LoopMove(b,1);

常量字符串不可以修改

作者: dizuo   发布时间: 2011-06-16

void LoopMove ( char *pStr, int steps )
{
 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

"123456" 这个是字符串常量,只读的。char *只是指向这个常量
改成
char b[]="123456";就行了

作者: luciferisnotsatan   发布时间: 2011-06-16

char *b="123456";
等于
const char *b="123456";

作者: shi3590   发布时间: 2011-06-16

引用 5 楼 luciferisnotsatan 的回复:
"123456" 这个是字符串常量,只读的。char *只是指向这个常量
改成
char b[]="123456";就行了

Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted.
这是怎么回事

作者: lt724123lt123   发布时间: 2011-06-16

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

作者: zhao4zhong1   发布时间: 2011-06-16

引用 7 楼 lt724123lt123 的回复:
引用 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

你定义的char *b = “12345”中的常量放在静态存储区,你是不能修改的,你应该把"12345"放在数组中

作者: pachonghanya   发布时间: 2011-06-16