malloc関数を用いて作成した文字列を管理するポインタ配列を実現したい
fgets関数により、ファイルの中身(文字列)を受けとり、受け取った文字列を格納する配列をmalloc関数で作成する。
上記を繰り返しできた配列たちをポインタ配列に入れていき、最後に表示する。というのが実現したい内容です。
現在、ファイルの中身の最終行のみ受け取ることができている状態です。
よろしくお願いいたします。
発生している問題
入力ファイル 0 AAL - Aalborg : Denmark Aalborg 1 AAR - Aarhus : Denmark Tirstrup 2 ABI - Abilene : TX : USA Municipal 3 ABJ - Abidjan : Cote D'ivoire Port Bouet 4 ABR - Aberdeen : SD : USA Aberdeen Regional Airport 5 ABZ - Aberdeen : Scotland : United Kingdom Dyce 6 AES - Aalesund : Norway Vigra 7 AHB - Abha : Saudi Arabia - Abha Airport 答え 0 AAL - Aalborg : Denmark Aalborg 2 ABI - Abilene : TX : USA Municipal 4 ABR - Aberdeen : SD : USA Aberdeen Regional Airport 6 AES - Aalesund : Norway Vigra 1 AAR - Aarhus : Denmark Tirstrup 3 ABJ - Abidjan : Cote D'ivoire Port Bouet 5 ABZ - Aberdeen : Scotland : United Kingdom Dyce 7 AHB - Abha : Saudi Arabia - Abha Airport 実際の出力 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport 7 AHB - Abha : Saudi Arabia - Abha Airport
該当のソースコード
#include <stdio.h> #include <stdlib.h> #include <string.h> #define LINELEN 128 int main(void) { int i, count; char **Line[LINELEN]={0}; char s[LINELEN]; char *clone=NULL; i = count = 0; while (fgets(s, LINELEN, stdin) != NULL) { clone = (char *)malloc(sizeof(char)*strlen(s)+1); strcpy(clone, s); Line[i] = &clone; if(i>=LINELEN) { fprintf(stderr, "行数がサイズを超えました\n"); break; } i++; count = i; } fprintf(stderr, "%d", count); for(i=0;i<count;i = i+2) { printf("%s\n", *Line[i]); } for(i=1;i<count;i = i+2) { printf("%s\n", *Line[i]); } free(clone); clone = NULL; return 0; }
補足情報
fgets関数で入力しなければならない、という決まりがあります。
Cygwinによりコンパイルしています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/30 06:42
2021/10/30 06:47