user1198331
user1198331

Reputation: 139

how to use crypt( ) method in Linux?

I just want to use crypt() to generate an encrypted password,and I write a demo which invoke the crypt() method. Here is my code

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

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

I compile it using "gcc tem.c -lcrypt' and when I run it, everything seems right, but a "segment error" shows up. so please tell me what's wrong with this simple program?

Upvotes: 6

Views: 27705

Answers (3)

teppic
teppic

Reputation: 8195

You need this:

#define _XOPEN_SOURCE

at the top of your source file, before any #include.

Alternatively compile with the gcc option -D_XOPEN_SOURCE.

Upvotes: 5

Some programmer dude
Some programmer dude

Reputation: 409136

If you compile with the flag -Wall you will see why.

If you read the manual page you will see that it uses #define _XOPEN_SOURCE before including <unistd.h>. It should actually be defined before including any header.

If you don't define _XOPEN_SOURCE then the crypt function will not be prototyped. Then the compiler doesn't know what the actual return type is, or the types and number of arguments. So it will assume that the function returns an int and your printf expects a string, so there will be a type mismatch that causes the crash.

Upvotes: 12

Mark Stanislav
Mark Stanislav

Reputation: 979

Looks like it could be related to crypto library support.

Try adding:

#include <crypt.h>

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

Looks good for me!

Upvotes: 3

Related Questions