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

環境: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 回答 (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;

どっちも効率的とは言い難いですが.
    • good
    • 0
この回答へのお礼

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

どうもありがとうございました。

お礼日時:2007/07/07 18:42

> 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] となるはずです。
    • good
    • 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という値を求めたかったのです。すみません。

お礼日時:2007/07/07 18:40

> strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが



[A][B][C][D][E][F][0][0][0]...[0]
では。

\0で終端されるのがC文字列の定義なので、長さ情報を別途持つ必要があるかと。
    • good
    • 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';

とした場合に、strから7という値を求めたいということでした。

お礼日時:2007/07/07 18:39

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