3

我有一个结构:

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。

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

4

1 回答 1

0

将结构元素拆分和重组为 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
于 2015-08-10T06:59:03.273 回答