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

标签 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,这不是正确的哈希结果。

我两天的 C 经验表明该函数永远不会返回我需要的内容,因为 hashed 会随着函数的结束而消失,对吧?我怎样才能修复它?

最佳答案

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

关于c - 如何处理不同大小的char变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808580/

相关文章:

来自字符串输入的 C++ 枚举值

c - 双字符指针 c 的简单多次重新分配

c++ - 无法在我的代码中计算出 char* 字符串

c - 如何找到句子中最短和最长单词之间的共同字母,C语言中的字符串

c - 在部分行上使用 fread() 时,如何移动到下一行?

c - 获取指针数据的大小

c - char数组的问题= char数组

C:二叉树,内存分配

c - 在线程内创建变量和传递指针的问题

C 在释放内存时将 double 类型的变量转换为 char 类型的变量