我觉得这应该是非常基本的,但由于某种原因,我被卡住了。
这是我所拥有的:
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));