2016-04-23 12 views
3

structをビルドし、int変数とchar変数を含んでいます。ここに私のコードは次のとおりです。構造体にchar文字列を定義して使用する

typedef struct { 
     uint16_t type;  
     uint16_t sn; 
     int data1; 
     int data2; 
     char crc[1024]; 
    }packet_t; 

その後、私はstructを作成するためのメソッドを使用します。

packet_t packetCreate(uint16_t type,uint16_t sn, uint16_t data1, 
uint16_t data2, char crc[1024]) 
{ 
    packet_t packet; 
    packet.type = type; 
    packet.sn = sn; 
    packet.data1 = data1; 
    packet.data2 = data2; 
    packet.crc = crcr; 
    return packet; 
} 

はまた、私はコード内の対応する変数を定義しています。しかし、コードをコンパイルすると、それは機能しません。

'char [1024]'をタイプ 'char *'から 'char'型に割り当てるときに互換性のない型があります:packet.crc = crcr; 構造体を定義して使用するにはどうすればよいですか?私は構造体の文字列を含むビルドしたいので、私はデータのCRC文字列を格納することができます。

+3

にあなたの機能を変更することができます;' '代わりpacket.crc = CRCRの;' – tom

+0

を参照してください:http://stackoverflow.com/ a/16645642/817132 またはK&R's C、97ページ:http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf – wally

+0

注:Cでは_メソッドをサポートしていません。 _functions_のみ。 – Olaf

答えて

3

memcpyを使用してください。すなわち

memcpy(packet.crc, crc, sizeof(packet.crc)); 

内容を配列にコピーします。

あなたがちょうど上記の方法が間違っている別のstring.Like

packet.crc = crc; 

に文字列を代入カントこの関数に

+0

NBがありませんカンマ - 'memcpy(packet.crc、crc、sizeof(packet。私は少なくとも6文字を入れなければならないので、これを編集しようとすることはできません。 – tom

+0

ありがとうございました。 –

3

を使用する

#include <string.h> 

を必要としています。 ライブラリstrcpyここからライブラリの文字列を使用する必要があります。

strcpy(packet.crc,crc); 

は、ライブラリstring.hのを呼び出すことを忘れないでください。

+1

注:Cには文字列型がありません。それはすべての大会です。とにかく彼らは同じ種類ではありません。メンバは配列で、パラメータはポインタです。 – Olaf

2

アレイを直接割り当てることはできません。 memcpy()のようなライブラリ関数を使用することもできます(NULL終了文字列の場合はstrcpy())。もう1つの方法は、ソース配列の要素をループで1つずつコピー先にコピーする方法です。

1

変数を関数内に定義し、関数が返されたときにpacketに割り当てられたメモリが「消えます」と定義することを心配しています。

mainpacketを宣言してからpacketのアドレスを使用してルーチンを呼び出す方が良いです - またはpacketへのポインタ。

行は `packet.crc = CRCである必要があります。次に

void packetCreate(packet_t *p_packet, ruint16_t type,uint16_t sn, uint16_t data1, 
uint16_t data2, char crc[1024]) 
{ 
    // p_packetn = &packet - it is a pointer to the packet 
    p_packet->type = type; 
    p_packet->sn = sn; 
    p_packet->data1 = data1; 
    p_packet->data2 = data2; 
    p_packet->crc = crcr; // note other answers to correct this line 
    return ; 
} 
+0

@CoolGuy - 多くのおかげで編集 - 大きな改善 – tom

関連する問題