我正在编码一个实现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];中完成的,您将在其中覆盖输入参数的每个字节。

10-08 13:45