質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Q&A

解決済

2回答

2338閲覧

c言語を使って連結リストのセルにchar型配列を代入したい

amenbo

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

0グッド

0クリップ

投稿2020/07/29 08:12

連結リストにchar型配列を入れる

現在c言語でテキストファイルを読み込んで連結リストに格納し、出力するプログラムを組んでいるのですがchar型配列がセルにうまく入りません。どこが悪いのか教えていただきたいです。

発生している問題・エラーメッセージ


test.txt
7
0 該当番号がなかった場合
1 abc
4 ddd
7 fkd
2 ieo
4 rif
9 fld


実行結果 該当数7 0 該当番号がなかった場合 9 fld 9 fld 9 fld 9 fld 9 fld 9 fld

該当のソースコード

c言語

1#include<stdio.h> 2#include<stdlib.h> 3#include"lib2.h" 4 5struct cell{ 6 char *no; 7 char *naiyo; 8 struct cell *next; 9}; 10 11struct unk{ 12 char no[512]; 13 char naiyo[512]; 14}; 15 16struct cell front={"0","0"}; 17 18void printList(void){ 19 struct cell *p; 20 p=front.next; 21 while(p!=NULL){ 22 printf("%s %s\n",p->no,p->naiyo); 23 p=p->next; 24 } 25} 26 27int main(int argc,char *argv[]){ 28 29 char no[512],naiyo[512]; 30 struct cell *p; 31 struct unk *unk; 32 int cnt,i; 33 34 35 if(argc!=2){ 36 fprintf(stderr,"プログラム引数を1つ指定してください\n"); 37 exit(1); 38 } 39 40 infile_open(argv[1]); 41 42 infile_scanf("%s",no); 43 cnt=atoi(no); 44 printf("該当数%d\n",cnt); 45 46 unk=malloc(sizeof(struct unk)); 47 if(unk==NULL){ 48 fprintf(stderr,"エラー:malloc失敗\n"); 49 exit(1); 50 } 51 52 infile_scanf("%s",unk->no); 53 infile_scanf("%s",unk->naiyo); 54 printf("%s ",unk->no); 55 printf("%s\n",unk->naiyo); 56 57 58 59 for(i=1;i<cnt;i++){ 60 p=malloc(sizeof(struct cell)); 61 if(p==NULL){ 62 fprintf(stderr,"エラー:malloc失敗\n"); 63 exit(1); 64 } 65 66 infile_scanf("%s",&no); 67 infile_scanf("%s",&naiyo); 68 69 70 p->no=no; 71 p->naiyo=naiyo; 72 73 p->next=front.next;/*新しいセルが今の先頭セルを指すようにする*/ 74 front.next=p;/*次にダミーセルが新しいセルを指すようにする*/ 75 76 } 77 infile_close(); 78 79 printList(); 80 81 return 0; 82}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

diff

1+#include <string.h> 2 3- infile_scanf("%s",&no); 4- infile_scanf("%s",&naiyo); 5+ infile_scanf("%s", no); 6+ infile_scanf("%s", naiyo); 7 8- p->no=no; 9- p->naiyo=naiyo; 10+ p->no = strdup(no); 11+ p->naiyo = strdup(naiyo);

strdup は Cの標準ライブラリ関数ではありませんが、
ほとんどの処理系には入っています。
strdup が何をするものか調べて、報告してください。

投稿2020/07/29 13:35

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

C

1 char no[512],naiyo[512]; 2 ... 3 p->no=no; 4 p->naiyo=naiyo;

p->no と p->naiyo には 常に同じポインタ値がセットされますから。

投稿2020/07/29 10:48

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amenbo

2020/07/29 12:38

迅速な回答ありがとうございます ご指摘のありましたところを直したいのですが修正方法がわからないので具体的にどう直したらよいか教えていただけますでしょうか。 度々すみません。
pepperleaf

2020/07/29 13:11

infile_scanf("%s",p->no); infile_scanf("%s",p->naiyo); では?
amenbo

2020/07/29 13:52

ありがとうございます!無事にできました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問