2016-05-19 4 views
1

char変数の文字に数値ASCIIを取得しようとしています。私のコードは、これまでのところです:c - 初期化によってポインタから整数

int main (int argc,char* argv[]) { 
    char c="A"; //here error 
    char b="'"; //here error 
    char d="z"; //and here error 
    printf("%d\n %d\n %d\n",c,b,d); 
} 

しかし、私は、次のエラーを取得:

analizer.c: In function ‘main’: 
analizer.c:13:8: warning: initialization makes integer from pointer without a cast [enabled by default] 
analizer.c:14:8: warning: initialization makes integer from pointer without a cast [enabled by default] 
analizer.c:15:8: warning: initialization makes integer from pointer without a cast [enabled by default] 
+5

char c = "A"; char c = 'A';を使用します。 – Linus

+1

コンパイラは無礼ではなく、何も問題がないことをあなたに伝えるものではありません。 – t0mm13b

+0

それについては何が失礼ですか? – glglgl

答えて

6

"A"文字列リテラル(文字の配列)です。 'A'は、文字定数(整数)です。あなたが望むものは後者でなければなりません。

#include <stdio.h> 

int main (int argc,char* argv[]) { 
    char c='A'; 
    char b='\''; // use escape sequence 
    char d='z'; 
    printf("%d\n %d\n %d\n",c,b,d); 
} 

コンパイラを使用すると、以下のような配列(文字列リテラル)の要素を抽出することができますが、文字定数を使用すると、この場合には良いはずです。あなたが(無効である)、これを行うとき

#include <stdio.h> 

int main (int argc,char* argv[]) { 
    char c="A"[0]; // a typical way to deal with arrays 
    char b=*"'"; // dereferencing of a pointer converted from an array 
    char d=0["z"]; // a tricky way: this is equivalent to *((0) + ("z")) 
    printf("%d\n %d\n %d\n",c,b,d); 
} 
2

基本的には文字列リテラルを指す:

char c="A"; 

あなたは、変数に単一文字を記述する必要があります。

char c='A'; 
char b='\''; 
char b='z'; 
1

C文字列は、文字の配列で、終端は\0です。したがって、1文字のみを使用する場合は、charという変数を宣言し、文字「single」を使用します。あなたは、文字列を使用したい場合は、char配列を宣言し、最初のケースで

char a='A' // just one character 
char b[20]="Some_Text"// multiple characters(a string) 

としてdouble引用符を使用し、aは「A」のが、第2の整数値が含まれている、bは、文字列のベースアドレスが含まれていますそれはを指します。配列b[]の各文字等b[0]b[1]としてインデックスを使用してアクセスする必要があります

あなたは

char a[]="A" // a string of size 1 

として単一の文字を表すための文字列を使用することができ、その後、あなたはそれが

printf("%d",a[0]); //0th element of the string 
として整数同等だ印刷することができます

または

他の回答に記載されているように一重引用符を使用します。

+0

'char a [1] =" A "'は珍しいと誤解を招く。これは、例えば 'char a [1] =" ABCDE "'と等価です。 1つの要素の宣言された配列は、文字列リテラルから必要な数の後続の文字、より具体的には最初の文字「A」で初期化されます。リテラルの残りの文字は無視されます。 'a'は0で終了しません。 'char a [2] =" A "'と書くと、char a [] = "A" 'と書く方が良いでしょう。 –

+0

@ PeterA.Schneiderあなたは間違いなしです。私は物事をOPのために簡単にしたいと思っていました。私の答えを誤解を招くように編集してもよろしいですか? –

関連する問題