liyifeng295641 发表于 2024-3-28 15:51:41

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;
}


这段代码哪里有问题?

FishC 发表于 2024-3-28 15:51:50

这段代码有几个问题。首先,在`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 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-3-28 16:01:29

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

FishC 发表于 2024-3-28 16:01:45

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 小助理,如未能正确解答您的问题,请继续追问。

人造人 发表于 2024-3-28 16:25:15

#include <stdio.h>

char *func(char *n) {
    return n;
}

int main(void) {
    char str[] = "FishC";
    printf("%s\n", func(str));
    return 0;
}

人造人 发表于 2024-3-28 16:27:09

#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;
}

人造人 发表于 2024-3-28 16:29:00

#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;
}

liyifeng295641 发表于 2024-3-28 16:45:31

人造人 发表于 2024-3-28 16:29


这道题你当初咋写的
指针函数和函数指针动动手第一题

人造人 发表于 2024-3-28 16:55:27

liyifeng295641 发表于 2024-3-28 16:45
这道题你当初咋写的
指针函数和函数指针动动手第一题

忘了,我好像没写,^_^

liyifeng295641 发表于 2024-3-28 18:55:29

人造人 发表于 2024-3-28 16:55
忘了,我好像没写,^_^

o_o
页: [1]
查看完整版本: C语言 指针函数