gpt4 book ai didi

将 unsigned char 转换为 char* 并在 C 中连接它们

转载 作者:行者123 更新时间:2023-11-30 20:03:59 24 4
gpt4 key购买 nike

我想将值 unsigned char 转换为通过函数传递值的 char* 类型之一。

这是我的程序:

int my_function(unsigned char param1, unsigned char param2)
{
char* buffer_char;

const char* mss_part_1 = "Value 1: ";
const char* mss_part_2 = " Value 2: ";

buffer_char = malloc(240);

strcpy(buffer_char, mss_part_1); //OK
strcat(buffer_char, param1); //ERROR
strcat(buffer_char, mss_part_2); //OK
strcat(buffer_char, param2); //ERROR

//Desire Output: "Value 1: 1234 Value 2: 5678"
printf("%s", buffer_char);

free(buffer_char);
}

int main(int argc, char const *argv[])
{
unsigned char value1[10];
unsigned char value2[10];

strncpy(value1, "1234", 4);
strncpy(value2, "5678", 4);

my_function(value1, value2);

return 0;
}

当我尝试将值连接为“unsigned char”时,问题出在 strcat() 函数中,但我还没有找到转换它的方法,以便我可以连接它。

我正在尝试使用 strcat() 函数,但我想知道是否有更有效的形式。

注意:显示输出值没有问题。

最佳答案

您的问题在于函数声明以及理解unsigned charunsigned char[]之间的区别。在您的函数定义中:

int my_function(unsigned char param1, unsigned char param2)

..您声明 my_function 接受两个参数,每个参数的类型均为 unsigned char。对于编译器来说,这意味着每个参数都包含一个字符..它不是指针,而是实际上一个 8 位整数类型..每个参数都应该保存一个 8 位字符。但您真正想要传递的是一个指向字符数组的指针:

int my_function(unsigned char *param1, unsigned char *param2)

int my_function(unsigned char param1[], unsigned char param2[])

对于编译器来说,这两者意味着相同的事情,因为数组的名称(无论数组中包含的类型如何)始终计算为指向数组中第一个元素的指针。

所以,当你定义一个变量时:

unsigned char value1[10];

.. 您正在分配(在本例中是在堆栈上.. 因为它是一个局部变量)一个由 10 个无符号字符组成的数组,一个接一个。但是,当您传递或引用 value1 时,它会计算为数组中第一个字符的地址,换句话说,是指向数组的指针,其类型为 unsigned char * .

您应该考虑的第二件事是,当您的文本似乎都是适合 char 数组类型的常规 ASCII 字符时,为什么要使用 unsigned char? unsigned char 没有任何问题,编译器通常会为您执行这些转换,但通常当您混合类型而不知道后果时,可能会遇到问题。请注意您使用的函数期望什么类型,并尽量保持一致。

关于将 unsigned char 转换为 char* 并在 C 中连接它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com