1

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

这是我所拥有的:

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),我就会得到“############ 处的未处理异常:访问冲突写入位置 #####”

我究竟做错了什么?

谢谢

4

2 回答 2

8

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

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

rot13 (foo);
于 2012-09-06T20:40:52.287 回答
1

就像pmg所说,阅读FAQ。以下示例可能会帮助您朝着正确的方向前进。

这是使用指向 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));
于 2012-09-06T23:44:16.413 回答