我觉得这应该是非常基本的,但出于某种原因,我被卡住了。
这就是我所拥有的:
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
)我得到'############的未处理异常:访问冲突写入位置# ####“
我做错了什么?
感谢
答案 0 :(得分:8)
您是否可能使用(指向一个)字符串文字作为实际参数调用rot13()
?
字符串文字在C中是只读的。尝试一下
char foo[] = "YOUR STRING TO BE ROT13'D IN-PLACE.";
rot13 (foo);
答案 1 :(得分:1)
以下是使用指向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));