1

KEY に NULL 終了文字用の余分なバイトを含む 8 バイトのキーがあります。

struct KEY { char k[9]; };

KEYSにはこれらのキーが4つあります。

struct KEYS { struct KEY uk[4]; };

これらと akeys へのポインターを宣言します。

struct KEY akey;
struct KEYS akeys;
struct KEYS * pkeys = &akeys;

ポインター pkeys を使用して、akeys 内のすべてのキーをゼロに設定したいと考えています。私は次のことを試しました:

struct KEY zerokey;
strcpy(zerokey.k, "00000000");
for (i = 0; i < 4; i++) {
    pkeys->uk[i] = zerokey;    
    printf("key=%s", pkeys->uk[i]);    //error: crashes program
    }

KEYS 用にメモリ ブロックを malloc する予定ですが、この単純な例を機能させることができません。

なぜこれが失敗するのですか?これを行うより良い方法はありますか?私の構造体はこれを行うための最良の方法ですか? キーを追加し、キーを検索し、KEYS 構造体への単一のポインターを使用してキーをゼロに設定したいと考えています。

4

2 に答える 2

0

これを使用し pkeys->uk[i]ているのは struct KEY タイプですが、 printf に char * タイプが必要であり、代わりに使用しますpkeys->uk[i].k

これらの行の代わりに

pkeys->uk[i] = zerokey;    
printf("key=%s", pkeys->uk[i]);  

これらの行を使用してください

strcpy(pkeys->uk[i].k ,zerokey.k); 
printf("key=%s\n", pkeys->uk[i].k); 

この変更されたコードを試してください:

#include<stdio.h>
#include<string.h>
struct KEY { char k[9]; };

struct KEYS { struct KEY uk[4]; };

main()
{
int i=0; 
struct KEYS akeys;
struct KEYS * pkeys = &akeys;

struct KEY zerokey;
strcpy(zerokey.k, "00000000");
for (i = 0; i < 4; i++) {
   strcpy(pkeys->uk[i].k ,zerokey.k); 
   printf("key=%s\n", pkeys->uk[i].k);   
       }
 }
于 2013-09-06T16:31:18.027 に答える