- ベストアンサー
初期化
int Func_read(void) { char*prtn1; char*prtn2; char szdat1[81]; char szdat2[81]; int nrtn; prtn1=fgets(szdat1,81,Fp1); prtn2=fgets(szdat2,81,Fp2); if(prtn1==NULL||prtn2==NULL) return(9); nrtn=memcmp(szdat1,szdat2,81); if(nrtn!=0) return } というプログラムで領域のすべてを比較するため、領域を0で初期化しなけれればなりません。どこで初期化すればよいでしょう?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★補足 ・質問の初期化とその場所は、他の回答者さんのアドバイスで良いです。 ・『Func_read』関数の戻り値がおかしいですよ。→多分、記述もれでしょうが…。注意! ・あと『81』というサイズも回答者 No.1 さんの様に『sizeof』演算子で指定する方法を お勧めします。下に手直ししたソースを載せておきます。参考に! 修正: int Func_read( void ) { char*prtn1; char*prtn2; char szdat1[81];←ここで初期化しても良い char szdat2[81];←ここの方が関数を呼ばない分だけ高速! int nrtn; ←ここで関数などで初期化 prtn1 = fgets( szdat1, sizeof(szdat1), Fp1 ); prtn2 = fgets( szdat2, sizeof(szdat2), Fp2 ); if ( (prtn1 == NULL) || (prtn2 == NULL) ){ return( 9 ); } nrtn = memcmp( szdat1, szdat2, sizeof(szdat1) ); if ( nrtn != 0 ){ return; ←何かリターンする } ←ここもリターンする } 最後に: ・『memset』関数以外に『ZeroMemory』API関数があります。 使い方は『memset』とほぼ同じです。→『ZeroMemory( szdat1, sizeof(szdat1) );』です。 ・過去に似たような質問があったので下の『参考URL』もどうぞ。 ・以上。おわり。→『構造体の初期化方法について』