xy2992
2016-06-28 03:30
采纳率: 100%
浏览 1.1k
已采纳

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;报错了在请问这是什么原因

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 云霏阳 2016-06-28 05:17
    已采纳

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

    点赞 打赏 评论
  • 星空底下的蛙蛙 2016-06-28 05:16

    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;
    }

    点赞 打赏 评论

相关推荐 更多相似问题