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

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。
当将结构体指针转换为char *指针后,我想在UART上打印缓冲区的值。是否可能做到这一点?

2
请不要使用 void main。请在标准中定义的入口点中选择一个。 - nvoigt
1
@nvoigt 您的陈述是自相矛盾的。标准定义了入口点可以是实现定义的。 - this
@nvoigt 你应该给微软(以及许多使用void main编译器的微控制器公司)打电话告诉他们这个。也许他们会雇用你。另一方面,他们很可能会忽略你荒谬的言论。https://msdn.microsoft.com/en-us/library/windows/desktop/ms633559%28v=vs.85%29.aspx https://duckduckgo.com/?q=c+microcontroller+%22void+main%28%22&t=ffsb #DontBeIgnorant - this
@nvoigt,你似乎生活在一个自我设限的泡泡里。你的论点是非黑即白的思维方式,这使它们变得毫无意义。我们生活在一个非常多元化的计算世界中,例如,以平台为中心的软件显然蓬勃发展。 - this
@this 这是一个免费的网站,随意使用。 - nvoigt
显示剩余4条评论
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

sprintf() 做了奇迹。谢谢。 - Pradeep Ch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接