注册 登录
编程论坛 C++教室

异常中断!麻烦各位了

sdg430 发布于 2010-06-28 20:31, 1080 次点击
#include <stdio.h>
#include <string.h>
#define max 10
int main()
{
    char *pstr="abcdef";
    int steps=3;
    int n=strlen(pstr)-steps;
    char tmp[max];
    strcpy(tmp,pstr+n);
    strcpy(tmp+steps,pstr);
    *(tmp+strlen(pstr))='\0';
    strcpy(pstr,tmp);
    printf("%s",*pstr);
    getchar();
    return 0;
}
在VS2008中执行后弹出

“wei.exe 中的 0x1026f689 (msvcr90d.dll) 处未处理的异常: 0xC0000005: 写入位置 0x00415740 时发生访问冲突”
这个要怎么解决,应该是内存冲突,但怎么改呢?我是菜鸟,麻烦各位了!
 
3 回复
#2
最近不在2010-06-28 20:53
程序代码:
#include <stdio.h>
#include <string.h>
#define max 10
int main()
{
    char *pstr="abcdef";   //pstr指向的是常量存储区,不能修改常量即所指向的内容“abcdef” ,所以  strcpy(pstr,tmp);会存在问题。解决方法char pstr[] = "abcdef"
    int steps=3;
    int n=strlen(pstr)-steps;
    char tmp[max];
    strcpy(tmp,pstr+n);
    strcpy(tmp+steps,pstr);
    *(tmp+strlen(pstr))='\0';
    strcpy(pstr,tmp);
    printf("%s", *pstr);   //改为 printf("%s", pstr),第二个参数地址值,所以不需要加*
       getchar();
    return 0;
}
#3
sdg4302010-06-29 14:47
回复 2楼 最近不在
谢谢版主了,在这里学到很多东西!
#4
南国利剑2010-06-30 19:06
建议你去看看我发的那个内存管理的帖子。
1