Падение при выполнении 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));