ページ 11

文字列の配列について

Posted: 2009年11月13日(金) 18:38
by どころてん
#include<stdio.h>
#include<string.h>

int main(void)
{
char str[81];
int len,cnt=0;

puts("文字列の入力");
scanf("%s",str);
len=strlen(str);

printf("%sは%d文字である \n",str,len);

for(cnt=0;cnt<len;cnt++){
putchar(str[cnt]);

printf("\n");
}
//putchar(str[cnt+1]);
return 0;
}

このプログラムについてですが、配列の文字列はナル文字\0の記述が必須と聞きました。
しかし、コメントの//putchar(str[cnt+1]);をプログラムに入れると
最後に「フ」?のようなエラーが出て、逆にこのまま実行すると正常に動きます。
なぜこのような事が起きるのでしょうか?
どなたかご回答お願いします。

Re:文字列の配列について

Posted: 2009年11月13日(金) 19:41
by non
>for(cnt=0;cnt<len;cnt++){
このfor文を抜けたとき、cntはいくらになっていると思いますか。
また、'\0'が格納されている配列のindexはいくらでしょう。

Re:文字列の配列について

Posted: 2009年11月13日(金) 23:52
by どころてん
for文が抜けた時のcntは0になると思いますが、
配列のindexって何ですか??

Re:文字列の配列について

Posted: 2009年11月14日(土) 00:09
by box
> for文が抜けた時のcntは0になると思いますが、

0になりません。
くだんのループは、cnt < len である間、継続します。
継続しなくなるのは、cnt == len になったときです。
そして、くだんのループを抜けたとき、cnt はその時点の値を保持しています。つまり、lenです。

> 配列のindexって何ですか??

添字のことです。

Re:文字列の配列について

Posted: 2009年11月14日(土) 02:04
by どころてん
'\0'が格納されている配列の場所は
str[len]の所にナル文字が入ると思います。

Re:文字列の配列について

Posted: 2009年11月14日(土) 06:04
by box
> '\0'が格納されている配列の場所は
> str[len]の所にナル文字が入ると思います。

その場合、
putchar(str[cnt+1]);
の添字の値は文字列として有効な場所でしょうか?

Re:文字列の配列について

Posted: 2009年11月14日(土) 15:17
by どころてん
ありがとうございました。
やっとナル文字の意味がわかりました。
for(cnt=0;cnt<len;cnt++)
だとlenが4の時、cntは0,1,2で止まって
最後にナル文字が入らなくなってしまいますね・・・

for(cnt=0;cnt<len+1;cnt++)
だったら大丈夫でしょうか??

Re:文字列の配列について

Posted: 2009年11月14日(土) 23:15
by box
> for(cnt=0;cnt<len;cnt++)
> だとlenが4の時、cntは0,1,2で止まって

なぜですか?
「0以上4未満」ですから、0, 1, 2, 3の4回ループします。

Re:文字列の配列について

Posted: 2009年11月15日(日) 00:28
by どころてん
すいません、3が抜けていました。