文字列の配列について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
どころてん

文字列の配列について

#1

投稿記事 by どころてん » 15年前

#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]);をプログラムに入れると
最後に「フ」?のようなエラーが出て、逆にこのまま実行すると正常に動きます。
なぜこのような事が起きるのでしょうか?
どなたかご回答お願いします。

non

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

#2

投稿記事 by non » 15年前

>for(cnt=0;cnt<len;cnt++){
このfor文を抜けたとき、cntはいくらになっていると思いますか。
また、'\0'が格納されている配列のindexはいくらでしょう。

どころてん

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

#3

投稿記事 by どころてん » 15年前

for文が抜けた時のcntは0になると思いますが、
配列のindexって何ですか??

box

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

#4

投稿記事 by box » 15年前

> for文が抜けた時のcntは0になると思いますが、

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

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

添字のことです。

どころてん

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

#5

投稿記事 by どころてん » 15年前

'\0'が格納されている配列の場所は
str[len]の所にナル文字が入ると思います。

box

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

#6

投稿記事 by box » 15年前

> '\0'が格納されている配列の場所は
> str[len]の所にナル文字が入ると思います。

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

どころてん

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

#7

投稿記事 by どころてん » 15年前

ありがとうございました。
やっとナル文字の意味がわかりました。
for(cnt=0;cnt<len;cnt++)
だとlenが4の時、cntは0,1,2で止まって
最後にナル文字が入らなくなってしまいますね・・・

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

box

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

#8

投稿記事 by box » 15年前

> for(cnt=0;cnt<len;cnt++)
> だとlenが4の時、cntは0,1,2で止まって

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

どころてん

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

#9

投稿記事 by どころてん » 15年前

すいません、3が抜けていました。

閉鎖

“C言語何でも質問掲示板” へ戻る