• ベストアンサー

0を含んだ文字列の長さ(バイト数)の求め方

環境:VC2005 WinAPI32 C言語 SDK 上記の環境でプログラミングをしています。 よろしくお願いいたします。 char str[256]=""; strcat(str, "ABC"); str[4]=0; strcat(str, "DEF"); たとえば上記のようなプログラムで、 str中のバイト数(文字列長?)を求めたいと思っています。 strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが、 このとき、7という値を取得したいのですが、何か効率的な方法はありますでしょうか・・。

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

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

今回求めたい文字情報より後ろの配列の内容がゼロクリヤされているという前提なら, '\0'でない,最後に現れる要素の位置を返せばいいでしょう. その前提が成り立たないなら,求めることは不可能です. int i, len; for(i=len=0; i<sizeof(str); i++)   if(str[i]) len=i+1; とか, int i, len; for(i=sizeof(str)-1, len=0; i>=0 &&str[i]=='\0'; i--)   ; len=i+1; どっちも効率的とは言い難いですが.

tanishi0718
質問者

お礼

回答ありがとうございます。 ご提示されたプログラムで7という値を求めることができました。 もうすこし、C言語を勉強したいと思います・・・。 どうもありがとうございました。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが、 そうはならないと思います。 > strcat(str, "ABC"); で、[A][B][C][0]...[0] > str[4]=0; で、[A][B][C][0][0]...[0] (実際には変化無し) そして、 > strcat(str, "DEF"); で、[A][B][C][D][E][F][0]...[0] となるはずです。

tanishi0718
質問者

お礼

まさしくそのとおりでした。 すみません。例のプログラムをまちがえていました。 char str[64]=""; str[0]='A'; str[1]='B'; str[2]='C'; str[3]=0; str[4]='D'; str[5]='E'; str[6]='F'; とした場合に、7という値を求めたかったのです。すみません。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが [A][B][C][D][E][F][0][0][0]...[0] では。 \0で終端されるのがC文字列の定義なので、長さ情報を別途持つ必要があるかと。

tanishi0718
質問者

お礼

回答ありがとうございます。 すみません。例プログラムが間違っておりました・・。 char str[64]=""; str[0]='A'; str[1]='B'; str[2]='C'; str[3]=0; str[4]='D'; str[5]='E'; str[6]='F'; とした場合に、strから7という値を求めたいということでした。

関連するQ&A