如何在Linux中使用crypt()方法?

use*_*331 6 c unix linux crypt

我只是想用来crypt()生成一个加密的密码,我写了一个调用该crypt()方法的demo .这是我的代码

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%s\n",crypt("abc","ab"));
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

我使用它编译它"gcc tem.c -lcrypt',当我运行它时,一切似乎都正确,但出现"段错误".请告诉我这个简单的程序有什么问题?

Som*_*ude 11

如果您使用旗帜进行编译,-Wall您将看到原因.

如果您阅读手册页,您将看到它#define _XOPEN_SOURCE在包含之前使用<unistd.h>.它应该在包含任何标题之前实际定义.

如果你没有定义_XOPEN_SOURCE那么crypt函数将不是原型.然后编译器不知道实际的返回类型是什么,或者参数的类型和数量.所以它会假设函数返回一个int并且你printf期望一个字符串,因此会出现导致崩溃的类型不匹配.


tep*_*pic 5

你需要这个:

#define _XOPEN_SOURCE
Run Code Online (Sandbox Code Playgroud)

在源文件的顶部,在任何之前#include.

或者使用gcc选项进行编译-D_XOPEN_SOURCE.