• ベストアンサー

初期化

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で初期化しなけれればなりません。どこで初期化すればよいでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.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』もどうぞ。 ・以上。おわり。→『構造体の初期化方法について』

参考URL:
http://oshiete1.goo.ne.jp/qa2727121.html

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

関数の長さにもよりますが, 配列を確保するときに char szdat1[81] = { 0 }; char szdat2[81] = { 0 }; と初期化してもよいかもしれません.

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

prtn1=fgets(szdat1,81,Fp1); の前に memset(szdat1,0,sizeof(szdat1)); memset(szdat2,0,sizeof(szdat2)); で初期化すればいいのでは。

関連するQ&A