【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?

line[100]で
「1」が格納されていたら「a」
「2」が格納されていたら「b」
「3」が格納されていたら「c」
とout[100]に代入する関数を作りたいのですが
コンパイルすると関数の部分で
warning: assignment makes integer from pointer without a cast
という警告がでます。
ポインターは使っていないのですが、ポインターに関する警告が出ているようで困っています。
どこが悪いのかまったくわからなくて作業が完全に止まってしまいました。
解決法をおしえてください。お願いします。

/*宣言*/
int=i; /*main関数内のfor文で使用*/
char line[100], out[100];
void change(int);

/*関数*/
void change(int i)
  {
   if(line[i]=='1'){
    out[10]="a\0"
   }if(line[i]=='2'){
    out[10]="b\0";
   }if(line[i]=='3'){
    out[10]="c\0"
}
}

A 回答 (2件)

>    out[10]="a\0"


>    out[10]="b\0";
>    out[10]="c\0"

"a\0"や"b\0"や"c\0"は「charへのポインタ」ですよ。

out[10]は「char」ですから「記憶域が小さい整数(つまり、charに)に、ポインタを代入すると、値が失われるぞ」と警告が出ます。

void change(int i)
  {
   if(line[i]=='1'){
    out[10]='a';
   }if(line[i]=='2'){
    out[10]='b';
   }if(line[i]=='3'){
    out[10]='c';
}
}
または
void change(int i)
  {
   if(line[i]=='1'){
    out[10]=0x61; /* aのASCIIコード */
   }if(line[i]=='2'){
    out[10]=0x62; /* bのASCIIコード */
   }if(line[i]=='3'){
    out[10]=0x63; /* cのASCIIコード */
}
}
と書きましょう。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
"a\0"という書き方がまずかったのですか。
以後気をつけます。

お礼日時:2008/12/11 14:33

char型の領域 out[10] に


文字列定数(char型のアドレス)"b\0"
を代入しようとしているから。

何がしたいんだか質問文からは読み取れませんが
out[10] = 'b' ;
とか
strcpy(&out[10],"b\0") ;
とか?
    • good
    • 3
この回答へのお礼

まだまだ勉強中の身で「strcpy」というのを、今回はじめて知りました。
とても役に立つ知識をおしえていただきありがとうございます。

お礼日時:2008/12/11 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A