1

2 つ(製品名と会社名) と 9 つの変数をtypedef struct含む名前付きの「項目」があります。(価格、金額など)。char[254]int

typedef structそれと1つの配列(1D)と1つの2次元配列からポインターを作成しました。

scanfポインターのそれぞれの変数にデータを格納するために使用しました (これまでのところ問題ありません)。

ここで、ポインターの変数のデータを配列 (1D) に「コピーして保存」し、1D 配列のデータを 2D 配列に「コピーして保存」したいと考えています。

1D配列へのポインターについては、これが私がしたことです:

void pointer_conversion(item *a, item curr[10000], int total)
{
memcpy(&curr[total], a, sizeof(item*));
} 
// Tried doing: memcpy(&curr[total],a,sizeof(item*) * 100); 
// Why 100?= just to be safe.  But still not working.

さて、この関数は最初char[254]のポインタaをコピーして 1D 配列に格納しますcurrが、残りの変数typedef structNULL.

何かアドバイス?

(Windows で VS2012 を使用)

typedef struct nodebase{
    char productname[254];
    char companyname[254];
    int price;
    int stocks;
//....
    struct nodebase *next; //Use the struct as linked-list
}item;
4

1 に答える 1

1

コードフラグメントが何をするかを考えてみましょう。

  • 関数は無効/何も返しません

    void
    
  • 関数名は pointer_conversion で、3 つの引数を取ります

  • 引数 a はアイテムへのポインタ (item*)
  • 引数 curr はアイテムの配列です (item[10000])
  • 引数の合計は int です

    pointer_conversion(item *a, item curr[10000], int total)
    {
    
  • memcpy は、宛先、送信元、およびコピーするバイト数の 3 つの引数を取ります

  • sizeof(item*)の大きさは? それはポインターと同じくらい大きいです。
  • 何バイトコピーしますか?sizeof(item)の大きさは?

    memcpy(&curr[total], a, sizeof(item*));
    }
    
  • しかし、あなたはおそらく item* item の次の要素をコピーしたくないでしょう

于 2013-10-04T04:54:02.067 に答える