我只想使用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'进行编译,当我运行它时,一切似乎都正确,但是出现了“段错误”。所以请告诉我这个简单的程序怎么了?

最佳答案

如果使用标志-Wall进行编译,则会看到原因。

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

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

关于c - 如何在Linux中使用crypt()方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15549591/

10-14 00:44