【发布时间】:2020-02-14 22:52:55
【问题描述】:
所以我正在编写一个函数来将十进制数转换为十六进制算术。我正在编写一个将进行转换的十六进制函数,我将在 main() 中调用它。我需要我的十六进制函数来返回十六进制数字的字符数组。我已经观看了 youtube 视频和其他有关在不同示例中返回字符数组的问题,但我无法使其在我的代码中工作。 我不断收到的错误是“十六进制类型冲突”
#include<stdio.h>
int main()
{
//receiving name from user
char name[50];
printf("Enter your name: ");
scanf("%s", name);
//recieving integer from user
char hex1[32];
int num;
printf("Enter an integer(1-1,000,000) or type x to exit: ");
scanf("%d", &num);
char hex[30];
printf("Hexadecimal: %s\n", hexadecimal(hex1));
}
char hexadecimal(char x[])
{
int quotient;
int temp, i;
i=1;
quotient = x;
char hex2[32];
memcpy(hex2, x, sizeof(hex2));
while (quotient != 0)
{
temp = quotient%16;
if(temp<10)
temp += 48;
else
temp += 55;
hex2[i++] = temp;
quotient = quotient/16;
}
return hex2;
}
【问题讨论】:
-
贴出的代码无法编译!除其他外,缺少声明:
#include <string.h>公开函数原型:memcpy(), -
关于:
return hex2;和char hexadecimal(char x[])这试图返回指向数组的指针:hex2[]但签名期望返回char,而不是char *。注意:当引用数组名时,它会降级为数组第一个字节的地址。它正在返回一个局部变量的地址。当函数退出时,局部变量会超出范围。结果是未定义的行为 -
关于这个函数签名:
char hexadecimal(char x[])这个函数在执行之前被调用并且main()开始之前没有签名的原型所以当它被调用时,参数和返回类型将默认为int,这是不正确的。
标签: c arrays function user-defined-functions return-type