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

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

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

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

解決済

コンパイルは通るのですがエラーが出て実行できない

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

2回答

0評価

0クリップ

2894閲覧

投稿2017/11/27 11:08

編集2017/11/27 11:16

コンパイルは通るのですがエラーが出て実行できない。とりあえずわかる範囲でデバッグしてみました。
エラーの箇所は実行結果に示してあります。。どう直せばいいかがわかりません。

コード #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define N 256 #define FILENAME "address.csv" struct address{ char number[N]; char name[N]; // 名前 char address[N]; // 住所  char tel[N]; // 電話 struct address *before; // ソートに必要である ,前のリスト struct address *next; // 次のリスト }; void list_add(struct address **ap,char *number, char *name, char *address, char *tel) { struct address *p; if ((p = malloc(sizeof(struct address))) != 0) { strcpy(p->number, number); strcpy(p->name, name); strcpy(p->address, address); strcpy(p->tel, tel); p->next = *ap; // *apの先頭アドレスをポインタpのp->nextに代入する。 // p->nextはstruct address *pの中で次のリストをしめしている。 // ポインタpの次のリストに追加したいstruct address **apの先頭アドレスを代入する。 // *apはheadである。 printf("p:%p\tnext3: %p\tbefore: %p \t*ap: %p\n", p, p->next, p->before,*ap); if (p->next != 0) // 代入された*apの先頭アドレスが0でないならば printf("p:%p\tnext3: %p\tbefore: %p\n", p, p->next, p->before); p->next->before = p; printf("p:%p\tnext3: %p\tbefore: %p\n", p, p->next, p->before); p->before = 0; // *apをheadにするために次のリストのp->beforeを0にしている。 printf("p:%p\tnext3: %p\tbefore: %p\n", p, p->next, p->before); *ap = p; // *apをheadにしている。 printf("p:%p\tnext3: %p\tbefore: %p \t*ap: %p\n", p, p->next, p->before,*ap); } } void release(struct address **ap) { if (*ap != 0) { release(&((*ap)->next)); free(*ap); *ap = 0; } } void chop(char *p) { for (; *p; p++) ; p--; while (*p == '\r' || *p == '\n') *(p--) = 0; } int main(void) { struct address *ap; FILE* fp; static char buff[N],number[N], name[N], address[N], tel[N]; char *token=","; ap = 0; if ((fp = fopen(FILENAME,"r")) != 0) { while(fgets(buff, N, fp) != 0){ chop(buff); strcpy(number, strtok(buff, token)); strcpy(name, strtok(NULL, token)); strcpy(address, strtok(NULL, token)); strcpy(tel, strtok(NULL, token)); list_add(&ap,number,name, address, tel); } fclose(fp); } release(&ap); return 0; } /* 実行結果 とりあえずわかる範囲でデバッグしてみました。 エラーの箇所は以下で起きています。どう直せばいいかがわかりません。 main () at list_add.c:75 75 strcpy(number, strtok(buff, token)); (gdb) 76 strcpy(name, strtok(NULL, token)); (gdb) 77 strcpy(address, strtok(NULL, token)); (gdb) 78 strcpy(tel, strtok(NULL, token)); (gdb) Program received signal SIGSEGV, Segmentation fault. 0x77915633 in strcat () from C:\WINDOWS\SysWOW64\msvcrt.dll (gdb) */

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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