無題

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

無題

#1

投稿記事 by apam » 15年前

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:無題

#2

投稿記事 by たいちう » 15年前

> str[i*4]というところの4をかけているところの理屈がどうしてもわかりません。

あなたが作ったプログラムでないならば、作った人に聞いてみたら良いでしょう。

憶測することはできます。
4の代わりに、3や2や1をかけるとどのような結果になりますか?
順番に試してみてください。


# titleを書きましょう。
#
# 以前のマルチポスト先も放置しないようにしましょう。
# www2.realint.com/cgi-bin/tarticles.cgi?pointc+33605
#
# 掲示板を使うときには、その掲示板のルールを熟読しましょう、ということです。

KEYONN_

Re:無題

#3

投稿記事 by KEYONN_ » 15年前

#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を掛けているのではないでしょうか?

閉鎖

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