#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:文字列の配列について
>for(cnt=0;cnt<len;cnt++){
このfor文を抜けたとき、cntはいくらになっていると思いますか。
また、'\0'が格納されている配列のindexはいくらでしょう。
このfor文を抜けたとき、cntはいくらになっていると思いますか。
また、'\0'が格納されている配列のindexはいくらでしょう。
Re:文字列の配列について
> for文が抜けた時のcntは0になると思いますが、
0になりません。
くだんのループは、cnt < len である間、継続します。
継続しなくなるのは、cnt == len になったときです。
そして、くだんのループを抜けたとき、cnt はその時点の値を保持しています。つまり、lenです。
> 配列のindexって何ですか??
添字のことです。
0になりません。
くだんのループは、cnt < len である間、継続します。
継続しなくなるのは、cnt == len になったときです。
そして、くだんのループを抜けたとき、cnt はその時点の値を保持しています。つまり、lenです。
> 配列のindexって何ですか??
添字のことです。
Re:文字列の配列について
> '\0'が格納されている配列の場所は
> str[len]の所にナル文字が入ると思います。
その場合、
putchar(str[cnt+1]);
の添字の値は文字列として有効な場所でしょうか?
> str[len]の所にナル文字が入ると思います。
その場合、
putchar(str[cnt+1]);
の添字の値は文字列として有効な場所でしょうか?
Re:文字列の配列について
ありがとうございました。
やっとナル文字の意味がわかりました。
for(cnt=0;cnt<len;cnt++)
だとlenが4の時、cntは0,1,2で止まって
最後にナル文字が入らなくなってしまいますね・・・
for(cnt=0;cnt<len+1;cnt++)
だったら大丈夫でしょうか??
やっとナル文字の意味がわかりました。
for(cnt=0;cnt<len;cnt++)
だとlenが4の時、cntは0,1,2で止まって
最後にナル文字が入らなくなってしまいますね・・・
for(cnt=0;cnt<len+1;cnt++)
だったら大丈夫でしょうか??
Re:文字列の配列について
> for(cnt=0;cnt<len;cnt++)
> だとlenが4の時、cntは0,1,2で止まって
なぜですか?
「0以上4未満」ですから、0, 1, 2, 3の4回ループします。
> だとlenが4の時、cntは0,1,2で止まって
なぜですか?
「0以上4未満」ですから、0, 1, 2, 3の4回ループします。