dポイントプレゼントキャンペーン実施中!

strcpy(p -> key ,name);と打ってp -> key に入力した名前を格納したいのですがうまくいきません。
ほかにもp -> key = nameなども試してみましたがコンパイルエラーが出現してダメでした。
うまく格納できるやり方があれば教えてください。よろしくお願いします。
#include<stdio.h>
#include<string.h>
#define WORD_LENGTH 50 /* 文字列の最大長 */


typedef struct cell{
char key[WORD_LENGTH];
struct cell *next; /* 次のセルへのポインタ */
} CELL;



void main(void)
{
char name[WORD_LENGTH];


CELL *p;
printf("名前入力\n");
scanf("%s\n", name);
strcpy(p -> key ,name);
printf("%s\n", p -> key);
}

A 回答 (5件)

No.1のサンプル



#include<stdio.h>
#include <stdlib.h> /* malloc, exit */
#include<string.h>
#define WORD_LENGTH 50 /* 文字列の最大長 */
#define WORD_LENGTH_STR "50" /* 文字列入力用 */

typedef struct cell{
char key[WORD_LENGTH+1];
struct cell *next; /* 次のセルへのポインタ */
} CELL;

void main(void)
{
char name[WORD_LENGTH+1];

CELL *p;
/* CELLを1個確保 */
if((p=malloc(sizeof(CELL)*1))==NULL) exit(-1);
/* 入力 */
printf("名前入力\n");
scanf("%"WORD_LENGTH_STR"s\n", name);
/* 代入 */
strncpy(p -> key ,name,WORD_LENGTH);
p->key[WORD_LENGTH]='\0'; /* scanfで文字数指定しているのでなくても大丈夫 */
/* 表示 */
printf("%s\n", p -> key);
/* 領域開放 */
free(p);
}
    • good
    • 0
この回答へのお礼

サンプルソース非常に参考になりました。
実際にコンパイルして実行したらよく理解できました。
本当にありがとうございます。

お礼日時:2004/10/31 21:36

CELL p;


printf("名前入力\n");
scanf("%s\n", name);
strcpy(p -> key ,name);
printf("%s\n", p -> key);

でOKでは?
    • good
    • 0

CELL *p;


というのは、CELLへのポインタ(CELLを指し示すもの)を作っているだけで、CELLそのものを作っているわけではありません。

No.2の方の回答にもありますように、
CELL cel1;
とすることで、CELLそのものを作り。
CELL *p = &cel1;
とすることで、p が cel1 を指すようになります。
これ以上のことは、C言語の入門書で「ポインタ」を勉強されるとよいと思います。

main関数で作るCELLが1つだけでよいなら、ここで特にmallocやポインタは必要ではなく、
CELL cel1;
...
strcpy( cel1.key, name );
cel1.next = NULL; /* これも一応 */
とすればよいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
解説を読んでよく理解することができました。

お礼日時:2004/10/31 21:34

p->とした場合、かならず、pの値が保証されている必要があります。

(保証とは、正しい値が設定されていること)
CELL *p;としただけでは、正しい値が設定された状態になっていません。そのためには、#1の方のようにするか、
CELL cel1;
CELL *p = &cel1;のようにしてpの値を設定する必要があります。ちなみに、私の提示した方法は、コンパイルエラーをとりあえずとるための方法で、貴方が本当に望んでいることとは、違っている可能性があります。
    • good
    • 0

pの指す先をmallocで作らないとだめじゃないでしょうか。

    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!