reallocで動的メモリ確保
書いたのでメモ書き
エラー処理が甘い( ゚д゚)!
#include#include #include int main(void){ char *str, *strDummy, **data, **dataDummy; int i, j, sCnt = 0, lCnt = 0; // メモリ確保 str = (char *)malloc(sizeof(char)); if(str == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; } // メモリ確保 data = (char **)malloc(sizeof(char*)); if(data == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; } printf("EOFで入力終了\n"); while((*(str + sCnt)=getchar()) != EOF){ // 改行コードが来たら行の終了 if('\n' == *(str + sCnt)){ // 改行文字を終端子へ書き換え *(str + sCnt) = '\0'; // メモリを再確保 dataDummy = (char **)realloc(data, sizeof(char *)*(lCnt+1)); if(dataDummy == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; }else{ data = dataDummy; } // メモリを確保 *(data + lCnt) = (char *)malloc(sizeof(char*)*(sCnt+1)); if(*(data + lCnt) == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; } // 文字列格納 memcpy(*(data + lCnt), str, sCnt+1); // 行数を増やす ++lCnt; // 初期化 sCnt = 0; free(str); str = (char *)malloc(sizeof(char)); }else{ // メモリを最確保 strDummy = (char *)realloc(str, sizeof(char *)*(sCnt+1)); if(strDummy == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; }else{ str = strDummy; } // 文字数加算 ++sCnt; } } printf("\nLine Num is %d\n",lCnt); for(i=0;i "); for(j=0;*(*(data + i) + j)!='\0';++j){ printf("%c", *(*(data + i) + j)); } // それぞれメモリ解放 free(*(data + i)); printf("\n"); } // メモリ解放 free(str); free(data); return 0; }
エラー処理が甘い( ゚д゚)!
コメント
コメントを投稿