Падение при выполнении Rot13 в C

Я чувствую, как будто это должно быть довольно фундаментальным, но по какой-то причине я застрял.

Вот что у меня есть:

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 ответа

Решение

Вы возможно звоните rot13() с (указателем на) строковым литералом в качестве фактического аргумента? Строковые литералы доступны только для чтения в C. Попробуйте что-нибудь

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

rot13 (foo);

Как сказал 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));
Другие вопросы по тегам