2012-11-25 15 views
7

へのcharのポインタを変換しますこれにコード:私はちょうどキャストけどで、それが動作しないことを私は考えていた、私はunsigned char型のVARにchar型のポインタを変換したいunsigned char型の配列

result.part1 = (unsigned char *) pch2; 
printf("STRUCT %s\n",result.part1); 

結果は単なる符号なし文字配列の構造体です。

EDIT:

  pch2 = strtok(ip, "."); 

      while(pch2 != NULL){ 
       printf("x %d x: %s\n", i, pch2); 
       pch2[size-1] = '\0'; 

       if(i == 1) 
        result.part1 = (unsigned char *) pch2; 
       if(i == 2) 
        result.part2 = (unsigned char *) pch2; 
       if(i == 3) 
        result.part3 = (unsigned char *) pch2; 
       if(i == 4) 
        result.part4 = (unsigned char *) pch2; 
       i++; 
       pch2 = strtok (NULL,"."); 
      } 
      printf("STRUCT %c\n",result.part1); 

構造体:

typedef struct 
{ 
    unsigned char part1; 
    unsigned char part2; 
    unsigned char part3; 
    unsigned char part4; 
} res; 
+2

あなたのタイトルでは、文字列に変数を求める配列があり、ほとんどの答えがあなたにunsigned charへのポインタを得る方法を示しています。どちらですか? – dmckee

+0

符号なしのchar配列に変換したいポインタがありますか? – user1007522

答えて

3

あなたはpch2がnullでない場合は、*

part1 = (unsigned char*) pch2; 

を忘れてしまったunsigned charないunsigned char*にキャストは、プログラムがクラッシュします終了し、あなたが運が良ければあなたがstrlenを使用するとき、あなたはpch2を使用して印刷する前に、まずそれを終了nullに必要なので、代わりにこれを試してみてください。

pch2[size-1] = '\0'; /* note single quote */ 
result.part1 = (unsigned char *) pch2; 

更新:ようなあなたの構造を定義するので:

typedef struct 
{ 
    const char *part1; 
    const char *part2 
    const char *part3; 
    const char *part4; 
} res; 

とせず、それに割り当てます全くキャスト:

result.part1 = pch2; 
+0

文字列のように印刷すると、プログラムの実行が停止しますか? – user1007522

+0

@ user1007522 Cの文字列は、 '' char''の文字列で終わらない文字列でなければなりません。何をしようとしていますか? – iabdalkader

+0

@ user1007522: '%c'を使用して1つの文字を印刷できます。例: 'printf(" STRUCT%c \ n "、* result.part1);' –

1

あなたはこれをしたい:

part1 = (unsigned char*) pch2; 

の代わりに:

part1 = (unsigned char) pch2; 
1

このような何か試してください: -

char *ph2; 
unsigned char *new_pointer = (unsigned char*) ph2; 
+0

私はそれをしましたが、printf%sを実行するとプログラムが停止しますか? pt2はstrtokによってinitされているので、strtokで何かですか? – user1007522

+0

printf( "STRUCT%c \ n"、result.part1)を試すことができます。 –

1

を私はunsigned char型のVAR

にchar型のポインタを変換するよろしいです? char型へのポインタをunsigned char型に変換することは、何の役にも立たないでしょう。値は1バイトに切り詰められ、それは意味がありません。たぶん、あなたは間接参照へのポインタをしたいし、それが指す値を取得 - あなたはこのような何かを行う必要があります。

unsigned char part1 = (unsigned char)*pch2; 

あなたの編集後、私はpart1が文字列であることを確認 - それが使用された後、あなたのプログラムがクラッシュした場合pch2が間違って入力されている可能性があります。多分'\0'ターミネーターを忘れてしまったでしょうか?

EDIT:

あなたが見

、それはすべての必要な情報を持つあなたの質問に答えるために、今もはるかに優れています。 strtokを使用する必要がありますか?これはいいだろうか?

res result; 
    char* ip = "123.23.56.33"; 

    sscanf(ip, "%hhu.%hhu.%hhu.%hhu", &result.part1, &result.part2, &result.part3, &result.part4); 
+0

これは、これまでの回答よりOPが探しているものに近いと思うが、まだOPがまだ明確ではないかどうかはまだ分かっていない。 – dmckee

+0

コードを編集しましたが、pch2の最初のプリントが魅力的なように見えるように、char配列を終了しました。最後のものではありません:( – user1007522

+0

ここで重要なポイントは、 'pch2 'によって指されているものとそこにどのように到達するのかです。これが分からなければ、正しく構築されているかどうかはわかりません。 "' '*確かにそこに存在するものではなく、とにかく' 'strlen''と誤った文字列があると思われますので、' 'pch2''がどの値を指しているのかを知る必要があります。 – Maciek

0

問題が見つかりました。char pch2をunsigned intにキャストするのを忘れてしまい、%uで印刷できます。 コード:あなたの助けみんなのため

unsigned int temp; 

temp = atoi(pch2); 

result.part1 = temp; 
printf("Struct: %u\n",result.part1); 

ありがとう!

関連する問題