c语言向自定数组_C语言怎么向自定义函数中传入一个数组,处理完再返回新的数组?...

展开全部

看你的代码。

你问题并不在数组传入62616964757a686964616fe4b893e5b19e31333431346362。你函数mymd5接收password数组,mymd5的password数组变量和外部函数的password地址相同,所以改变其中外部函数的数组也改变。

但你mymd5返回的数组decrypt,是局部变量,当mymd5调用结束,这个数组的内存空间就释放了。你接收了也是NULL。所以要用malloc或calloc申请动态内存。这样不会被释放。

我写了简单案例,你参考:

#include

#include

#include

char *md(char a[]);//错误的数组返回

char *md2(char a[]);//正确的数组返回

int main()

{

char password[10]="123456789",*decrypt=NULL;

decrypt=md(password);

printf("外部函数传递数组到子函数,子函数改变,外部函数也改变,password=%s\n",password);

printf("错误返回方式:局部变量,外部函数接收失败,被自动释放,decrypt=%s\n",decrypt);

decrypt=md2(password);

printf("正确返回方式:动态申请,外部函数接收成功,不会被自动释放,decrypt=%s\n",decrypt);

return 0;

}

char *md(char password[])

{

char decrypt[10]="*********";

password[0]=0,strcpy(password,"abcdefghi");

return decrypt;

}

char *md2(char password[])

{

char *decrypt=(char *)malloc(sizeof(char)*10);

if(!decrypt)

return NULL;

strcpy(decrypt,"*********");

password[0]=0,strcpy(password,"abcdefghi");

return decrypt;

}


版权声明:本文为weixin_35414887原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。