C语言 指针函数
#include <stdio.h>char *func(char n);
char *func(char n){
char *p = &n;
return p;
}
int main(void){
char str[] = "FishC";
printf("%s", func(str));
return 0;
}
这段代码哪里有问题? 这段代码有几个问题。首先,在`char *func(char n)`函数中,您尝试将一个`char`类型的变量的地址赋给指针`p`,这是不正确的,因为指针应该指向一个可访问的内存位置。其次,在`main`函数中定义字符串时,应使用双引号而不是单引号来表示字符串。
下面是修改后的代码:
#include <stdio.h>
char* func(char* str) {
return str;
}
int main(void) {
char str[] = "FishC";
printf("%s", func(str));
return 0;
}
在修改后的代码中,`func`函数接受一个字符串的指针,并将其直接返回。在`main`函数中,我们定义了一个字符数组`str[]`来存储字符串,并传递它的地址给`func`函数。最后,我们使用`printf`函数打印出返回的字符串。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 15:51
这段代码有几个问题。首先,在`char *func(char n)`函数中,您尝试将一个`char`类型的变量的地址赋给指针`p ...
#include <stdio.h>
#include <string.h>
#include "md5.h"
#define MAX 1024
char *func(char *);
char *func(char *str){
return str;
}
int main(void)
{
int i;
unsigned char encrypt;
unsigned char decrypt;
printf("请输入密码:");
scanf("%s", encrypt);
printf("你输入的密码是:%s\n", func(encrypt));
printf("加密的密码是:");
MD5_CTX md5;
// 初始化
MD5Init(&md5);
// 传入明文字符串及其长度
MD5Update(&md5, encrypt, strlen((char *)encrypt));
// 得到加密后的字符串
MD5Final(&md5, decrypt);
for (i = 0; i < 16; i++)
{
printf("%02x", decrypt);
}
putchar('\n');
return 0;
}
这是编译器给我的警告!
test.c:24:45: warning: passing 'unsigned char' to parameter of type 'char *' converts between pointers to integer types where one is of the unique plain 'char' type and the other is not [-Wpointer-sign]
printf("你输入的密码是:%s\n", func(encrypt));
^~~~~~~
test.c:9:18: note: passing argument to parameter 'str' here
char *func(char *str){
^
帮我改进代码,@FishC liyifeng295641 发表于 2024-03-28 16:01
#include
#include
#include "md5.h"
#define...
这个警告是因为`func()`函数接受的参数类型是`char *`,而你传递的是`unsigned char`数组。虽然C语言中`char`和`unsigned char`都表示字符类型,但它们在指针类型上是不同的。
要修复这个警告,你可以将`encrypt`数组声明为`char`类型而不是`unsigned char`类型。另外,可以省略`func()`函数,因为它仅仅返回输入的字符串。
下面是修改后的代码:
#include <stdio.h>
#include <string.h>
#include "md5.h"
#define MAX 1024
int main(void)
{
int i;
char encrypt;
unsigned char decrypt;
printf("请输入密码:");
scanf("%s", encrypt);
printf("你输入的密码是:%s\n", encrypt);
printf("加密的密码是:");
MD5_CTX md5;
MD5Init(&md5);
MD5Update(&md5, (unsigned char*)encrypt, strlen(encrypt));
MD5Final(&md5, decrypt);
for (i = 0; i < 16; i++)
{
printf("%02x", decrypt);
}
putchar('\n');
return 0;
}
这样修改后代码应该能够正常运行,并且不会再有警告信息输出。希望对你有帮助!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 #include <stdio.h>
char *func(char *n) {
return n;
}
int main(void) {
char str[] = "FishC";
printf("%s\n", func(str));
return 0;
}
#include <stdio.h>
#include <string.h>
#include "md5.h"
#define MAX 1024
char *func(char *);
char *func(char *str){
return str;
}
int main(void)
{
int i;
char encrypt;
char decrypt;
printf("请输入密码:");
scanf("%s", encrypt);
printf("你输入的密码是:%s\n", func(encrypt));
printf("加密的密码是:");
MD5_CTX md5;
// 初始化
MD5Init(&md5);
// 传入明文字符串及其长度
MD5Update(&md5, encrypt, strlen((char *)encrypt));
// 得到加密后的字符串
MD5Final(&md5, decrypt);
for (i = 0; i < 16; i++)
{
printf("%02x", decrypt);
}
putchar('\n');
return 0;
}
#include <stdio.h>
#include <string.h>
#include "md5.h"
#define MAX 1024
int main(void) {
int i;
char encrypt;
char decrypt;
printf("请输入密码:");
scanf("%s", encrypt);
printf("你输入的密码是:%s\n", encrypt);
printf("加密的密码是:");
MD5_CTX md5;
// 初始化
MD5Init(&md5);
// 传入明文字符串及其长度
MD5Update(&md5, encrypt, strlen(encrypt));
// 得到加密后的字符串
MD5Final(&md5, decrypt);
for(i = 0; i < 16; i++) {
printf("%02x", decrypt);
}
putchar('\n');
return 0;
}
人造人 发表于 2024-3-28 16:29
这道题你当初咋写的
指针函数和函数指针动动手第一题 liyifeng295641 发表于 2024-3-28 16:45
这道题你当初咋写的
指针函数和函数指针动动手第一题
忘了,我好像没写,^_^
人造人 发表于 2024-3-28 16:55
忘了,我好像没写,^_^
o_o
页:
[1]