我只想使用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'
编译它,当我运行它时,一切似乎都正确,但出现“段错误”。请告诉我这个简单的程序有什么问题?
答案 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
对我来说很好看!