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* 文字列に再結合するもう 1 つの方法は、文字列関数sprintfand then を使用すること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 に答える