将结构转换为 C 中的 char* 指针

Converting Structure to char* pointer in C

我有一个结构:

struct K 
{
  char a[10];
  char b[10];
};

我希望将此结构转换为 char* 指针并在 Uart 上打印值。 Uart 以 char* 指针作为输入。

我的主要功能如下:

void main()
{
    struct K x= { "Hello","Pollo"};
    struct K *revert;
    char *buffer;
    buffer = (char *)&x;
    revert = (struct K *) buffer;
    printf("%s %s", revert->a,revert->b);
}

注意:printf() 不起作用,我使用的是 UART。

当完成将结构指针转换为 char * 指针时,我想在 UART 上打印缓冲区值。有可能这样做吗?

另一种将结构元素拆分并重组为 char* 字符串的方法是使用字符串函数 sprintf,然后是 strncpy。有很多很多方法可以做到这一点。简单的指针运算就可以,等等。但这种方法相当干净和直接:

#include <stdio.h>
#include <string.h>

struct K 
{
char a[10];
char b[10];
};

int main (void)
{
    char tmp[21] = {0};
    char *buf = tmp;
    struct K x = { "Hello","Pollo"};
    struct K rev = {{0},{0}};

    /* combine x.a & x.b into single string in buf */
    sprintf (buf, "%s%s", x.a, x.b);

    /* print the combined results */
    printf ("\n combined strings: %s\n\n", buf);

    /* get original lenght of x.a & x.b */
    size_t alen = strlen(x.a);
    size_t blen = strlen(x.b);

    /* copy from buf into rev.a & rev.b as required */
    strncpy (rev.a, buf, alen);
    strncpy (rev.b, buf+alen, blen);

    printf (" recombined: rev.a: %s  rev.b: %s\n\n", rev.a, rev.b);

    return 0;
}

输出

$ ./bin/struct2str

 combined strings: HelloPollo

 recombined: rev.a: Hello  rev.b: Pollo