sizeofについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
polpol

sizeofについて

#1

投稿記事 by polpol » 15年前

渡された文字配列のサイズを動的に取得しようと思いsizeofを使って以下のコードで
試してみたのですがうまく取得されませんでした。

コード:

#include "DxLib.h"
#include <math.h>

					
int  CP ;							// 参照する文字列番号と文字列中の文字ポインタ

char iArray[] = {	"あいうえおかきくけこ", };



int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{	//ウィンドウモードで起動
	ChangeWindowMode( TRUE );
	char OneMojiBuf[ 3 ] ;	// 1文字分一時記憶配列
	int i , j ;

	SetGraphMode( 640 , 480 , 16 ) ;
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;				// エラーが起きたら直ちに終了
	}

	
  //デバッグ用にコンソールを呼び出す
        AllocConsole();
        freopen("CONOUT$", "w", stdout); 
        freopen("CONIN$", "r", stdin);
	// ループ
	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
	{
		
	CP ++ ;


if(CP==100){
for( j = 0 ; j <21 ; j ++ ){
	iArray[ j ] = 0 ;
		}
			}		
		
int size = sizeof(iArray);
printf("CP:%d\n",CP);
printf("size:%d\n",size);
printf("iArray:%s\n",iArray);

		// 裏画面の内容を表画面に反映させる
		ScreenFlip() ;
	}
      //コンソール解放
        FreeConsole();
	DxLib_End() ;				// DXライブラリ使用の終了処理

	return 0 ;					// ソフトの終了
}
CP =100の時に文字配列iArrayを空にしてるのでprintf("size:%d\n",size);で0がプリントされるのを
期待していたのですがなぜか空にする前のサイズ21がプリントされます
なぜこうなるのでしょうか。また他に配列のサイズを動的に取得するいい方法があれば
ご教授よろしくお願いします。

アバター
a5ua
記事: 199
登録日時: 15年前

Re: sizeofについて

#2

投稿記事 by a5ua » 15年前

sizeofで得られるサイズとは、その変数が使用しているメモリ領域のサイズです。
したがって上記プログラムでは、sizeof(iArray)の値は、21という定数になります。
文字列の長さを取得したいのでしたら、strlenなどの標準ライブラリ関数を使うといいでしょう。

polpol

Re: sizeofについて

#3

投稿記事 by polpol » 15年前

>a5uaさん

strlenでうまくできました。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る