ページ 1 / 1
無題
Posted: 2010年3月08日(月) 14:56
by apam
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:無題
Posted: 2010年3月08日(月) 15:36
by たいちう
> str[i*4]というところの4をかけているところの理屈がどうしてもわかりません。
あなたが作ったプログラムでないならば、作った人に聞いてみたら良いでしょう。
憶測することはできます。
4の代わりに、3や2や1をかけるとどのような結果になりますか?
順番に試してみてください。
# titleを書きましょう。
#
# 以前のマルチポスト先も放置しないようにしましょう。
# www2.realint.com/cgi-bin/tarticles.cgi?pointc+33605
#
# 掲示板を使うときには、その掲示板のルールを熟読しましょう、ということです。
Re:無題
Posted: 2010年3月08日(月) 18:23
by KEYONN_
#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を掛けているのではないでしょうか?