C言語初心者です。初歩的な質問で申し訳ありませんがどなたかご教授お願いします。
char型の配列に"SPAM"という単語を20個分格納して表示するプログラムを作成しなさい。
--------------------------------------------------------------------------------
char str[100];
int i;
for( i = 0 ; i < 20 ; i++ ){
str[i*4] = 'S';
str[(i*4)+1] = 'P';
str[(i*4)+2] = 'A';
str[(i*4)+3] = 'M';
str[(i*4)+4] = 0;
}
printf( "%s", str );
というプログラムなんですが、str[i*4]というところの4をかけているところの理屈がどうしてもわかりません。よろしくお願いします<(_ _)>
無題
Re:無題
> str[i*4]というところの4をかけているところの理屈がどうしてもわかりません。
あなたが作ったプログラムでないならば、作った人に聞いてみたら良いでしょう。
憶測することはできます。
4の代わりに、3や2や1をかけるとどのような結果になりますか?
順番に試してみてください。
# titleを書きましょう。
#
# 以前のマルチポスト先も放置しないようにしましょう。
# www2.realint.com/cgi-bin/tarticles.cgi?pointc+33605
#
# 掲示板を使うときには、その掲示板のルールを熟読しましょう、ということです。
あなたが作ったプログラムでないならば、作った人に聞いてみたら良いでしょう。
憶測することはできます。
4の代わりに、3や2や1をかけるとどのような結果になりますか?
順番に試してみてください。
# titleを書きましょう。
#
# 以前のマルチポスト先も放置しないようにしましょう。
# www2.realint.com/cgi-bin/tarticles.cgi?pointc+33605
#
# 掲示板を使うときには、その掲示板のルールを熟読しましょう、ということです。
Re:無題
#include<stdio.h> int main() { char str[81]; int i; for( i = 0 ; i < 20 ; i++ ){ str[i*4] = 'S'; str[(i*4)+1] = 'P'; str[(i*4)+2] = 'A'; str[(i*4)+3] = 'M'; str[(i*4)+4] = 0; } //というfor文をばらせば分かります。 /* str[0*4]='S';//0 str[(0*4)+1]='P';//1 str[(0*4)+2]='A';//2 str[(0*4)+3]='M';//3 str[(0*4)+4]='\0';//4 str[1*4]='S';//4 str[(1*4)+1]='P';//5 str[(1*4)+2]='A';//6 str[(1*4)+3]='M';//7 str[(1*4)+4]='\0';//8 str[2*4]='S';//8 str[(2*4)+1]='P';//9 str[(2*4)+2]='A';//10 str[(2*4)+3]='M';//11 str[(2*4)+4]='\0';//12 … str[18*4]='S';//72 str[(18*4)+1]='P';//73 str[(18*4)+2]='A';//74 str[(18*4)+3]='M';//75 str[(18*4)+4]='\0';//76 str[19*4]='S';//76 str[(19*4)+1]='P';//77 str[(19*4)+2]='A';//78 str[(19*4)+3]='M';//79 str[(19*4)+4]='\0';//80 */ printf( "%s", str ); return 0; }こうして見ると、4の倍数の添え字の時に'\0'と文字列の先頭である'S'が重なっています。
となると、5を掛けたい所ですが、\0を代入すると、文字列の終端になってしまうため、
4を掛けているのではないでしょうか?