• ベストアンサー

char c = 'a'; char h[1] = c; エラー

char型のものを char[]型に代入したいです。 char c = 'a'; char h[1] = c; として、 h[0] は \x97 h[1] は \x00 にしたいです。 型変換の方法を教えてください。

  • A__
  • お礼率59% (194/328)

質問者が選んだベストアンサー

  • ベストアンサー
  • tailkuppa
  • ベストアンサー率53% (52/98)
回答No.1

とりあえず、確認を。 C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。 (\xnnn を、十六進数の意味に取りましたが、あってますでしょうか? この場合、C では通常 0xnnn のように書くと思います。) ので、 これは 0x61 のことをおっしゃっていると仮定します。 > char h[1] = c; っと、これではたぶんコンパイルが通りません。 char h[1] = {c}; のように、配列であることを明示して代入してください。 この式では、前半でh という名前の、*長さ1 の* char の配列変数を確保します。 後半で、その中を初期化しています。 添え字は 0 からはじまるので、この場合、h[0] に c の内容が代入されます。 1個しか場所を確保していないので、 h[1] の位置のデータは内容が不定です。 文字列として h を扱いたいのであれば、 C の文字列には終端として 0 が必要ですから、 char c = 'a'; char h[2] = { c, '\0'}; のような書き方が必要になります。 これで、お望みのデータになると思います。

A__
質問者

お礼

\x97 は書き間違えと16進に直すのも忘れていました。 h[1] までを使うためには、h[2] で宣言しないと いけなかったんですよね。よく間違えるんだけど 言われるまで気づきませんでした。 = {c} というの書式は初めて使いました。 やりたかったことはできました。 ありがとございます。 char型のものを char *型に代入する場合も = {c} が使えたのはうれしかったです。 char c = 'a'; char *p = {c};

関連するQ&A

  • charの操作について

    お世話になります、フジと申します。 今回皆様にお聞きしたいことはchar型変数の操作についてなのですが、次のプログラムのようにchar型に代入した整数を16進数用に変換させ、最後に同じchar型の変数に代入したいと考えています。 int a,b,c; char data = 48; //dataに10進数48を代入 c = (int)data; //ここでcは48になる a = c/16;          //16進数用に変換 b = c%16; c = 10*a + b;        //ここでcは30になる このint型変数c(30)をchar型変数dataに代入するにはどうしたらいいでしょうか? char buf[5]; sprintf(buf,"%d",c); にすればchar型の配列に代入することは出来ますが、これだとcの値30がbuf[0]=3,buf[1]=0となってしまい、目的の操作が達成できません。 よい方法をしっている方がいましたら、宜しくお願い致します。

  • error C2664

    現在VisualStudio C++ 6.0にてプログラムを組んでいるのですが、以下のようなエラーが出ます。 型の変換ができていないであろうことはわかるのですが、解決方法がわかりません。 どのような解決方法があるのでしょうか? よろしくお願いします。 error C2664: 'strcat' : 1 番目の引数を 'unsigned char [256]' から 'char *' に変換できません。 (新しい機能 ; ヘルプを参照) 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。

  • char→10進数

    PICのプラグラムをC言語で書いています。 unsigned charでxを宣言して、xには電圧をAD変換した値(8bit)が代入されます。このxの値を10進数に変換したいのですが、char型をどうすればint型に変換すればいいのか分かりません。 自分なりに作ってみましたが、うまく動作しません。ご教授よろしくお願いします。 /*抜粋*/ unsigned char x; int y,i; float n; ・・・ y=0; for(i=7;i>=0;i--){   n=(((x>>i)<<7)>>7);   if(n==1)n=pow(2,i);   y=y+(int)n; }

  • char型について質問

    char型は文字コードを保持する型とjavaの解説書に書いてありました。 そして、文字コードは10進数でなく16進数で表すと書いてありました。 でもchar型の変数には10進数も代入できます。これはコンピューターが10進数を16進数に変換しているからですか?

    • ベストアンサー
    • Java
  • char型・int型を相互変換させるプログラミング

    今、C++で2つのPC間で数値データの送受信を出来るようにしようと思い、実際にデータを飛ばせるところまで来たのですが、送れるデータの型はchar型のみであるとのこと。 ですので、intの値を一旦charにして送り、送った先でまたintにしたらいいかなと考えてプログラミングしました。 簡単にできると思ったのですが、上手くいきません・・・。プログラムのどの部分が間違っているのでしょうか? 一人では、これ以上悩んでも好転しないので、皆さんのご指導をお願いします 以下プログラム抜粋、このプログラムでは型変換がおこなわれているかの確認ができればいいので、それのみでプログラミングしています =================================================== #include <stdio.h> #include <stdlib.h> #include <string> #include <iostream> int main() { int a=123; char *b=new char; int c=1; //変換部分 *b=(char)a; std::cout<<"int→char>>>"<< c << "\n"; //逆変換部分 d=atoi(c); std::cout<<"char→int>>>"<< d << "\n"; } ======================================================

  • C++のクラス内のchar *strについて

    初歩的な質問で申し訳ありませんが、いまC++を勉強していてわからないところがあったので質問させていただきます。以前C言語を少ししていたのでアスタリスクがポインタのことを指しているというのはわかるのですがC++でクラスを扱うとなったときなぜクラス内でconst char *strと変数の前にアスタリスクがつくのかがわかりません。ためしにアスタリスクを外してコンパイルすると4つくらいエラーが出てきて読み取り専用メンバへの代入とかchar* から char への不正(?)な変換とか出てくるのですが肝心のアスタリスクをつける意味が結局わかりませんでした。なので誰か教えてください。

  • char型の扱える範囲とは?

    整数をchar型にしたいと思い int a = 250; char b[1]; sprintf(b, %d, a); と書いたのですが, char型の扱える整数の範囲である-256~255のint型の整数しか char型にこの場合変換できないということでいいでしょうか? またint型に代入できる値は,32bit以内の整数という考えでいいですか?

  • 【JAVA】CharをByteに変換したい。

    JAVAで、CharをByteに変換したいです。 以下の様なメソッドを用意して通してたのですが -------------------------------------- public static byte[] Char2Bytes(char c){ int i = (int)c; return new byte[] { (byte)(i >> 8), (byte)(i & 0x00ff) }; -------------------------------------- 「a」などの場合、このメソッドを通すと「 a」となってしまいます。 他に変換する方法などないでしょうか? または、上記で「 a」とせず「a」にする方法はございますか? #byte[0]の中身が「0」であればの判定以外で

  • char型+char型ってint型? if(char型==int型)?

    C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。 char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。 (下のプログラムの printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ という部分の結果は4なので、int型と考えるべきなのかな。) 私は、char型とint型の加算の結果はint型だと思っていましたが、 char型とchar型の加算の結果はやはりchar型だと思っていました。 (それが間違えているのでしょうか。) if(a[0]==i) /* char型とint型の比較(?) */ の部分では、左辺はchar型、右辺はint型ですが、このように型の違う変数を比較しても文法上構わないのでしょうか。 (私は、「比較は必ず型の同じもの同士でしかできない」と思っていました。) 左辺はchar型のように見えて、じつはint型ですか。 #include <stdio.h> int main(void) { char a[4]; int i=77; printf("sizeof(int)は%d\n", sizeof(int)); printf("sizeof(char)は%d\n", sizeof(char)); printf("sizeof('M')は%d\n", sizeof('M')); printf("sizeof(a[0])は%d\n", sizeof(a[0])); a[0]='M'; a[1]=7+6; a[2]=a[0]+a[1]; printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ printf("sizeof(+a[0])=%d\n", sizeof(+a[0])); if(a[0]==i) /* char型とint型の比較(?) */ puts("a[0]==i"); else puts("a[0]!=i"); return(0); } ちなみにワーニングもエラーもなんにもでません。

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

専門家に質問してみよう