在C中执行Rot13时崩溃

时间:2012-09-06 20:37:11

标签: c arrays char rot13

我觉得这应该是非常基本的,但出于某种原因,我被卡住了。

这就是我所拥有的:

char *rot13(char *s)
{        
    char *p=s;        
    int upper;

    while (*p) {    
        upper=toupper(*p);              
        if (upper >='A' && upper <= 'M')
            *p+=13;  
        else if (upper>='N' && upper <= 'Z')
            *p-=13;  
        ++p;    
    }       
    return s;
}

我不是C大师但是我相对肯定这是微不足道的我似乎无法确定它。我得到的错误是它遇到任何一个char修饰符(*p+=13*p-=13)我得到'############的未处理异常:访问冲突写入位置# ####“

我做错了什么?

感谢

2 个答案:

答案 0 :(得分:8)

您是否可能使用(指向一个)字符串文字作为实际参数调用rot13()? 字符串文字在C中是只读的。尝试一下

char foo[] = "YOUR STRING TO BE ROT13'D IN-PLACE.";

rot13 (foo);

答案 1 :(得分:1)

像pmg说的那样,请阅读常见问题解答。以下示例可能有助于指导您朝着正确的方向发展。

以下是使用指向char而不是char数组的指针的示例:

char *foo = malloc(36); // 35 + 1 for ending '\0'
strcpy(foo, "YOUR STRING TO BE ROT13'D IN-PLACE."); // requires #include <string.h>
printf("%s\n", rot13(foo));