0

我为修剪字符串“c 和 c++ 中的 char 数组或 char 指针”使用此函数:

inline char * trimRight(char * str)
{
    char * end = str + strlen(str);
    while(str != end)
    {
        end--;
        switch(*end)
        {
            case ' ':
            case '\t':
            case '\n':
            case '\v':
            case '\f':
            case '\r':
            break;
            default:
                *(end+1) = '\0';
                return end+1;
        }
    }
    return str;
}

但返回此错误(代码中的原因*(end+1) = '\0'):

x.exe 中出现“System.AccessViolationException”类型的未处理异常

附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

请帮我。

4

1 回答 1

1

毫无疑问,您试图在受写保护的字符串文字上调用此函数。确保你不使用任何字符串文字,你会没事的。

坏的:

char *s = "hello   ";
trimRight(s);

好的:

char s[] = "hello   ";
trimRight(s);

顺便说一句,如果字符串都是空格,您的函数不会修剪任何内容。我不确定你是否想要这样,但它似乎应该*str = '\0';在这种情况下设置。

于 2015-03-21T11:04:41.860 回答