在C中执行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大师,但我相对确定这是一件微不足道的事情,我似乎无法确定它。我得到的错误是,一旦它击中任何一个字符修饰符(*p+=13*p-=13),我就会在###########处得到"未处理的异常":访问违规写入位置#####"

我做错了什么?

感谢

调用rot13()时,是否使用(指向)字符串文字作为实际参数?字符串文字在C中是只读的。试试

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

正如pmg所说,请阅读常见问题解答。以下示例可能有助于引导您朝着正确的方向前进。

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

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

相关内容

  • 没有找到相关文章

最新更新