アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語のソースの最後のループのところなんですが、

strcpy ( ( cBuff + strlen( cBuff ) - ( iCutcnt + 1 ) ), "\n" );
というところでどういう処理をしているのかわかりません。

Fp[0]は読みだし専用でファイルを開いたファイルポインタで
Fp[1]は書き込み専用でファイルを開いたファイルポインタです。

iCutcntはコマンドライン引数で指定した任意の数字を数値化したものです。

while( 1 ) {
if( !fgets( cBuff, sizeof( cBuff ), Fp[0] ) )
break;
if( strlen ( cBuff ) < iCutcnt ) {
iReturnValue = 1;
break;
}
strcpy ( ( cBuff + strlen( cBuff ) - ( iCutcnt + 1 ) ), "\n" );
fprintf( Fp[1], "%s", cBuff );
}
for( iLoopCnt = 0; iLoopCnt < 2; iLoopCnt++)
fclose( Fp[ iLoopcnt ] );
return iReturnValue;
}

A 回答 (3件)

cBuff


に文字列を書き込んだ後で
終わりの部分に
¥n と NULL
を書き込んでいる。
また、
cBuff + strlen( cBuff ) - ( iCutcnt + 1 )
この部分が書き込む位置です。
この値は、
メモリー上の場所を表している数値です。
    • good
    • 0
この回答へのお礼

解決できました。どうもありがとうございました!

お礼日時:2008/09/21 21:53

C言語では、文字列は「文字の配列」として表現しており、


文字配列のうち'\0'がくるまでを「文字列」として認識します。
それをふまえたうえで、strcpy がどういう結果を生み出すのか考えてみてください。
以下の3つのコードはどれも同じ意味です。

・その1
cBuff[strlen( cBuff ) - ( iCutcnt + 1 )] = '\n';
cBuff[strlen( cBuff ) - ( iCutcnt + 1 ) + 1] = '\0';

・その2
strcpy ( &cBuff[strlen( cBuff ) - ( iCutcnt + 1 )], "\n" );

・その3
strcpy ( ( cBuff + strlen( cBuff ) - ( iCutcnt + 1 ) ), "\n" );
    • good
    • 0
この回答へのお礼

解決できました。どうもありがとうございました!

お礼日時:2008/09/21 21:52

???


> ( cBuff + strlen( cBuff ) - ( iCutcnt + 1 ) )
これがわからないのかな?
それぞれが一体何の演算をしているのかを把握したら判るんじゃない?
それとも「strcpy」や「strlen」が判らないのかな?それならその文字列でweb検索でもしたらすぐ出てくるんじゃない?


答えを直接書かないのはそういうサイトの約束なのでヒントだけ。。。

この回答への補足

わからないのは
strcpy ( ( cBuff + strlen( cBuff ) - ( iCutcnt + 1 ) ), "\n" );
fprintf( Fp[1], "%s", cBuff );
の2行ですね。

ファイルの中身をcBuffに格納したものにその長さを足してある数値を引く。
それに\nをコピーする。
そしてFp[1]にcBuffを書き込む。
結局のところがよくわからりません。

補足日時:2008/09/21 15:31
    • good
    • 0
この回答へのお礼

解決できました。どうもありがとうございました!

お礼日時:2008/09/21 21:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!