【问题标题】:Converting Structure to char* pointer in C在C中将结构转换为char *指针
【发布时间】:2015-08-10 06:27:53
【问题描述】:

我有一个结构:

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 上打印缓冲区值。有可能这样做吗?

【问题讨论】:

  • 请不要使用void main。采用标准中定义的入口点之一。
  • @nvoigt 您的说法自相矛盾。标准定义入口点可以实现定义。
  • @this 你意识到“定义的实现”是一件坏事,对吧?
  • @nvoigt 你应该打电话给微软(以及很多很多微控制器公司,它们在编译器中使用 void main )并告诉他们。也许他们会雇用你。另一方面,他们很可能会忽略你荒谬的陈述。 msdn.microsoft.com/en-us/library/windows/desktop/…duckduckgo.com/…#DontBeIgnorant
  • 我的荒谬言论导致了跨平台的工作程序。您可以忽略它们,但您不会获得跨平台、符合标准的代码。如果您想减少目标,这是您的选择。

标签: c struct uart char-pointer


【解决方案1】:

另一种将结构元素拆分和重组为 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() 创造了奇迹。谢谢。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
相关资源
最近更新 更多