C++有关字符串小程序指针赋值时,报错

#include
#include
int TrimStrEnd(char * str);
int main()
{
char * str = "skllkslskeopapkpfaeoef\nljlj";
TrimStrEnd(str);
return 0;
}
int TrimStrEnd(char * str)
{
char * pS = strrchr(str, '\r');
if (pS)
*pS = 0;
else pS = strrchr(str, '\n');
if (pS)
*pS = 0;
else return 0;

return 1;

}


没怎么看懂这个TrimStrEnd实现什么功能,试着输了个字符串就在*pS = 0;报错了在请问这是什么原因

就是将一个字符串的末尾改成0,由于回车换行在不同的平台上可能有问题。

ps是一个char*,你让它去指向一个数值型的0,当然会报错,你可以

#include
#include
using namespace std;

int TrimStrEnd(char * str);
int main()
{
char* str = "skllkslskeopapkpfaeoef\nljlj";
TrimStrEnd(str);
return 0;
}
int TrimStrEnd(char * str)
{
char* pS = strrchr(str, '\r'); //pS是一个空指针,因为str字符串中匹配不到\r
//if(pS == NULL) cout << 1;//由此判断克制pS为空
if (pS)
pS = 0;//这里不会执行到 建议改成 pS = "0"
else pS = strrchr(str, '\n');//执行这里的时候,匹配\n,所以pS的值为ljlj
//cout << pS; //可以看到pS的值
if (pS) //pS不为空
pS = "0"; // pS是个字符串,不是内存地址,所以用*pS是会报内存错误的,第二它是一个char
不是int*
else return 0;
return 1;
}