- ベストアンサー
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という値を取得したいのですが、何か効率的な方法はありますでしょうか・・。
- みんなの回答 (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; どっちも効率的とは言い難いですが.
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
> 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] となるはずです。
お礼
まさしくそのとおりでした。 すみません。例のプログラムをまちがえていました。 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)
> strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが [A][B][C][D][E][F][0][0][0]...[0] では。 \0で終端されるのがC文字列の定義なので、長さ情報を別途持つ必要があるかと。
お礼
回答ありがとうございます。 すみません。例プログラムが間違っておりました・・。 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という値を求めたいということでした。
お礼
回答ありがとうございます。 ご提示されたプログラムで7という値を求めることができました。 もうすこし、C言語を勉強したいと思います・・・。 どうもありがとうございました。