掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27787

strlenについて
投稿者---こうく(2006/08/01 12:34:09)


現在UNIXのgccにてc言語を使っています。
ひとつ疑問があり投稿しました。

strlenのことですが
strlenとは「文字列の長さを計算する」といくことはわかりましたが、
たとえば
strlen(str) == 1 というふうにした場合この==1はどのような意味に
なるのでしょうか?
この1は別に0とか2とかでも何か意味があるのでしょうか?

strは引数でchar str[100]とします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:strlenについて 27788 nop 2006/08/01 12:43:19
<子記事> Re:strlenについて 27789 たかぎ 2006/08/01 12:54:04


No.27788

Re:strlenについて
投稿者---nop(2006/08/01 12:43:19)


> strlen(str) == 1 というふうにした場合この==1はどのような意味に
>なるのでしょうか?

strlen(str) の戻り値が 1 であれば真、
そうでなければ偽となる。
つまり、文字列の長さが 1 かどうか、と言うこと。


この投稿にコメントする

削除パスワード

No.27789

Re:strlenについて
投稿者---たかぎ(2006/08/01 12:54:04)
http://takagi.in/


例えば、

strlen("a")==1

は真になりますが、

strlen("")==1

strlen("ab")==1

は偽になります。

strlenが返す値は、末尾のナル文字を除いた文字列の長さです。
配列のサイズがどれだけあったとしても関係ありません。



この投稿にコメントする

削除パスワード

No.27791

Re:strlenについて
投稿者---こうく(2006/08/01 13:28:53)


>例えば、
>
>strlen("a")==1
>
>は真になりますが、
>
>strlen("")==1
>や
>strlen("ab")==1
>
>は偽になります。
>
>strlenが返す値は、末尾のナル文字を除いた文字列の長さです。
>配列のサイズがどれだけあったとしても関係ありません。


nopさん、たかぎさんご返事ありがとうございます。

ではもし

文字列をキーボードで入力したい場合、入力した場合は
引き続き入力できるようにして、終了の場合は空白(文字列を入力しない)
でEnterキーで終了にしたい場合

if(strlen(str) == 1) {
break;
else
fgets(str,sizeof(str),stdin);
printf("入力した文字列は、\n %s です。\n", str);

と実行できたのですが、この場合の==1の意味はどういう意味でしょうか?  
別に空白(入力しない)たったら==1のところを==''でもいいと
思うのですが・・



この投稿にコメントする

削除パスワード

No.27792

Re:strlenについて
投稿者---こうく(2006/08/01 13:38:01)


>>例えば、
>>
>>strlen("a")==1
>>
>>は真になりますが、
>>
>>strlen("")==1
>>や
>>strlen("ab")==1
>>
>>は偽になります。
>>
>>strlenが返す値は、末尾のナル文字を除いた文字列の長さです。
>>配列のサイズがどれだけあったとしても関係ありません。
>
>
>nopさん、たかぎさんご返事ありがとうございます。
>
>ではもし
>
>文字列をキーボードで入力したい場合、入力した場合は
>引き続き入力できるようにして、終了の場合は空白(文字列を入力しない)
>でEnterキーで終了にしたい場合
>
>if(strlen(str) == 1) {
> break;
> else
> fgets(str,sizeof(str),stdin);
> printf("入力した文字列は、\n %s です。\n", str);
>
>と実行できたのですが、この場合の==1の意味はどういう意味でしょうか?  
>別に空白(入力しない)たったら==1のところを==''でもいいと
>思うのですが・・

すみません、追加ですが==1というのは文字列が0ということのでしょうか?
といううことは0は-1で1を引いた値になるのでしょうか?


この投稿にコメントする

削除パスワード

No.27793

Re:strlenについて
投稿者---ruby(2006/08/01 13:51:17)


>と実行できたのですが、この場合の==1の意味はどういう意味でしょうか?

入力した文字列の長さが1だったら、という意味です。
ここで、文字列の入力にfgets関数を使っていますので、
文字列の長さにはEnterキーの分を含んでいます。
例えば、
abc<Enter>
と入力した場合、strlen(str)==4です。
Enterキーだけを入力した場合、strlen(str)==1となります。

>別に空白(入力しない)たったら==1のところを==''でもいいと
>思うのですが・・

strlen(str)は文字列の長さですから、数値です。
==''という比較は正しくありません。

p.s.
引用は、必要最小限にしましょう。


この投稿にコメントする

削除パスワード

No.27795

Re:strlenについて
投稿者---ruby(2006/08/01 14:01:39)


>ここで、文字列の入力にfgets関数を使っていますので、

No.27793で、この行はなくてよかったかもしれないです。


この投稿にコメントする

削除パスワード

No.27796

Re:strlenについて
投稿者---こうく(2006/08/01 14:11:07)


>>ここで、文字列の入力にfgets関数を使っていますので、
>
>No.27793で、この行はなくてよかったかもしれないです。
rubyさん、ありがとうございました。
理解できました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧