#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include<iostream>
#include<string>
using namespace std;
char* delc(char* s, char c)
{
char *p;
while (p = strchr(s, c))
{
strcpy(p, p + 1);
}
return s;
}
int main()
{
char*s = new char[20];
s = { “pen pineapple apple pen };
cout << s << endl;
delc(s, “p”);
cout << s << endl;
system(“pause”);
return 0;
}
在strcpy(p,p+1)处即出现访问冲突的错误,本人也试着逐行调试找出错误原因,但始终不知道怎么会出错
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include<iostream>
#include<string>
using namespace std;
char* delc(char* s, char c)
{
char *p;
while (p = strchr(s, c))
{
strcpy(p, p + 1);
}
return s;
}
int main()
{
char*s = new char[20];
s = { “pen pineapple apple pen };
cout << s << endl;
delc(s, “p”);
cout << s << endl;
system(“pause”);
return 0;
}
在strcpy(p,p+1)处即出现访问冲突的错误,本人也试着逐行调试找出错误原因,但始终不知道怎么会出错
解决方案
10
strcpy两个参数不能指向同一片内存。
10
char*s = new char[20]; s = { "pen pineapple apple pen" };//执行这句后s指向常量字符串pen pineapple apple pen"的首地址
10
int main() { char*s = new char[100];//20明显太小 strcpy(s, "pen pineapple apple pen"); // 这样初化 cout << s << endl; delc(s, "p"); cout << s << endl; system("pause"); return 0; }
20
strcpy要求你源地址与目标地址中的字符串不能重叠部分
你的strcpy(p, p + 1); 有重叠部分
你的strcpy(p, p + 1); 有重叠部分
5
#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写,后果自负!