如何处理不同大小的char变量?

时间:2015-09-27 13:46:06

标签: c char

我正在尝试实现一个简单的代码,该代码返回给定密码的相应MD5:

#include <stdio.h>

//Returns the MD5 hash for a given password
char hash_password(char password){

    FILE *fp;
    char command [1024];
    sprintf(command, "md5 <<< '%c'", password);

    fp = popen(command, "r");
    if (fp == NULL) {
        printf("Failed to run command\n" );
    }

    char hashed[1024];
    fgets(hashed , 1024 , fp);
    pclose(fp);
    return hashed;
}

int main(int argc, const char * argv[]) {
    char hashed = hash_password("password");
    printf("%s\n", hashed);
    return 0;
}

我的问题如下:

  1. 我在return hashed;处收到警告:“不兼容的指向整数转换的指针从结果类型为char的函数返回char [1024]”
  2. 我在char hashed = hash_password("password");发出警告:“不兼容指向整数传递char [9]的指针到char类型的参数”
  3. 程序返回\320,这不是正确的哈希结果。
  4. 我对C的两天经验表明,函数将永远不会返回我需要的函数,因为hashed将在函数结束时死掉,对吧?我怎样才能修好它?

1 个答案:

答案 0 :(得分:1)

  1. 您无法返回类似的临时数组。相反,让调用者传入一个指向数组的指针然后写入它。
  2. 与返回类型类似,如果您打算使用字符串,则参数不能为char。它应该是char*const char*