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

时间:2013-03-21 13:58:30

标签: c linux unix crypt

我只想使用crypt()生成加密密码,然后编写一个调用crypt()方法的演示。 这是我的代码

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

int main()
{
    printf("%s\n",crypt("abc","ab"));
    exit(0);
}

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

3 个答案:

答案 0 :(得分:10)

如果使用标记-Wall进行编译,您将看到原因。

如果您阅读manual page,则会在包含#define _XOPEN_SOURCE之前看到它使用<unistd.h>。它应该在包含任何标题之前实际定义。

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

答案 1 :(得分:5)

你需要这个:

#define _XOPEN_SOURCE

位于源文件的顶部,位于任何#include之前。

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

答案 2 :(得分:2)

看起来它可能与加密库支持有关。

尝试添加:

#include <crypt.h>

[mstanislav@pardalislabs ~]$ gcc tem.c -lcrypt
[mstanislav@pardalislabs ~]$ ./a.out  
abFZSxKKdq5s6

对我来说很好看!