Я не вижу, как работает следующий код при перезаписи массива char cd2
.Я пытаюсь просто выделить место для двух строк, а затем заполнить их результатами функции crypt
.Я не уверен, насколько большую роль здесь играет crypt
или это какая-то другая функция манипуляции со строками.Но приведенный ниже вывод не должен быть одинаковым, они должны иметь разные значения.Но они оба "ttxtRM6GAOLtI", и я пытался получить один вывод, чтобы начать с "ss" .
#include <crypt.h>
#include <unistd.h>
#include <pwd.h>
#include <string.h>
#include <stdio.h>
int main(int argc, string argv[])
{
char *cd;
cd = malloc(30 * sizeof(*cd));
char *cd2;
cd2 = malloc(30 * sizeof(*cd2));
cd2 = crypt("yum", "ss");
cd = crypt("yum", "tt");
printf("hasehd 'yum' with 'tt' salt is %s\n",cd);
printf("hasehd 'yum' with 'ss' salt is %s\n",cd2);
}
output -
hasehd 'yum' with 'tt' salt is ttxtRM6GAOLtI
hasehd 'yum' with 'ss' salt is ttxtRM6GAOLtI
ОБНОВЛЕНИЕ: Я изменил его, чтобы не использовать malloc, но я думаю, что я должен все еще распределять память через объявление массива char.* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * strcpy
* * * * * * * * *
* *1018* * * * * *.рекомендовал, и я использовал malloc, чтобы выделить место для массива.
strcpy
кажется немного чище, потому что мне не нужно указывать длину.
#include <crypt.h>
#include <unistd.h>
#include <pwd.h>
#include <string.h>
#include <stdio.h>
int main(int argc, string argv[])
{
int PWORD_LENGTH = 30;
char *cd;
char *cd2;
cd = malloc(sizeof(char) * (PWORD_LENGTH + 1));
cd2 = malloc(sizeof(char) * (PWORD_LENGTH + 1));
strcpy(cd2, crypt("yum", "ss"));
strcpy(cd, crypt("yum", "tt"));
printf("hasehd 'yum' with 'tt' salt is %s\n",cd);
printf("hasehd 'yum' with 'ss' salt is %s\n",cd2);
}
выход -
hasehd 'yum' with 'tt' salt is ttxtRM6GAOL
hasehd 'yum' with 'ss' salt is ssqDHVWOCwe