![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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);
}
No.4ベストアンサー
- 回答日時:
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);
}
No.5
- 回答日時:
CELL p;
printf("名前入力\n");
scanf("%s\n", name);
strcpy(p -> key ,name);
printf("%s\n", p -> key);
でOKでは?
No.3
- 回答日時:
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; /* これも一応 */
とすればよいです。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.2
- 回答日時:
p->とした場合、かならず、pの値が保証されている必要があります。
(保証とは、正しい値が設定されていること)CELL *p;としただけでは、正しい値が設定された状態になっていません。そのためには、#1の方のようにするか、
CELL cel1;
CELL *p = &cel1;のようにしてpの値を設定する必要があります。ちなみに、私の提示した方法は、コンパイルエラーをとりあえずとるための方法で、貴方が本当に望んでいることとは、違っている可能性があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
C言語のポインタに直接アドレス...
-
c言語で任意のファイルから読み...
-
関数の引数をvoid*でキャストする
-
ポインタについて
-
アプリを32bitから64bit移行
-
構造体の中の構造体
-
VBはCを混乱させる?
-
ReadFileの読み込みエラーについて
-
参照型で受け取った引数をポイ...
-
【C言語】戻り値が構造体の関数
-
CWnd::EnableWindow()の扱い方
-
ポインタいついて教えてください
-
CObArrayとCPtrArrayの違い
-
NULLとブランクの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
C言語の関数と配列に関する質問
-
LPSTR型の初期化について
-
戻り値で構造体を返すことは可...
-
参照型で受け取った引数をポイ...
-
構造体とfscanf
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
Cで作成したDLL関数をVBから呼...
-
C言語でのconstを返す関数
-
main(int argc,char **argv[])...
-
DLL<->VB間での受け渡し(文字...
-
エラーの意味
-
PASCALとFARの意味
-
ハンドルはポインタか
-
CWnd::EnableWindow()の扱い方
おすすめ情報