我正在编码一个实现rot13的函数,我仅以a,b,...,m(+13)为例,但是我遇到了分段错误和警告:
码:
#include <stdio.h>
#include <string.h>
char rot13(char palabra[]) { //char *palabra
int y = (short) strlen(palabra);
char abc[27]="abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < y ; ++i) {
if(palabra[i]<'m' && palabra[i]>='a'){
for (int j = 0; j <26 ; ++j) {
if (palabra[i]==abc[j]){
palabra[i]=abc[j+13];
}
}
}
}
return palabra;
}
int main() {
rot13("aaa");
return 0;
}
警告:
main.c:18:12: warning: return makes integer from pointer without a cast [-Wint-conversion]
return palabra;
我需要帮助以了解警告以及如何解决问题,谢谢!
最佳答案
另一个主要问题是您的代码试图更改字符串文字("aaa"
),这在C语言中被视为未定义的行为。编译器可以自由地将字符串文字存储在只读内存区域中。
它是在palabra[i]=abc[j+13];
中完成的,您将在其中覆盖输入参数的每个字节。