0

ストリームに2つの言語コードが入っています。これを3バイトのchar配列(unsigned char a [3])に格納しています。ポインタに格納されている別の値(unsigned char * c)と比較したかったのですが、配列a [3]は構造体(struct s [2])内に格納され、複数のデータを取得します-これは正しいですか配列として少し混乱しています-constポインターはすでに場所を指しているため、別の場所を指すようにすることはできません。ただし、構造体の内部に配列を含め、構造体配列のzeorth要素を1つの場所と、構造体配列の1番目の要素を指すようにすることは可能です。私が持っている理解は正しいですか。

2つの配列値を格納したかったので、3バイトのchar配列を宣言した構造体を宣言しました。この方法は正しいですか。それを行う別の方法はありますか?

編集:

   #include<stdio.h>
int main(){
 int i,flag=0,count=0;
 struct n{
  unsigned char b[3];
 };
 unsigned char *d=NULL; 
 struct s{
  unsigned char *a;
 };
 struct s m[2];
 struct n w[2];
// memcpy(w[0].b,"eng",sizeof("eng"));
// memcpy(w[1].b,"fre",sizeof("fre"));
strcpy(w[0].b,"eng");
strcpy(w[1].b,"fre");

 d = w[1].b; // current lang
 m[0].a = w[0].b; // storing the 2 lang in a pointer inside a structure
 m[1].a = w[1].b;
 i=0;
 printf("\nm[0].a:%s\n",m[0].a);
 printf("\nm[1].a:%s\n",m[1].a);
printf("\nw[0].b:%s\n",w[0].b);
 printf("\nw[1].b:%s\n",w[1].b);
 while((m[i].a) && d){ // And comparing
  if(m[i].a++ != d++){ 
   flag =1; //if strings are unequal break;
   break;
  }
 i++;
 }
  if(flag){
   printf("Not equal\n");
  }
  else{
   printf("\nEqual\n");
   flag =0;
  }
 return 0;
}

o / p:

m[0].a:engfre

m[1].a:fre

w[0].b:engfre

w[1].b:fre
Not equal

しかし、それが等しくないことを示す間違いがあります。構造内のポインタに配列を格納するこの方法は正しい方法ですか。またはこれを行う他の方法はありますか。

編集:

2つの弦を比較したかった。2つの文字列は等しいですが、私はそれを等しくないと思っています。ポインタは2つの配列を格納するための構造体に格納する必要がありますか、それともこれを行う別の方法がありますか。

4

1 に答える 1

2
#include <stdio.h>
#include <string.h>
int main(){
  int i,flag=0,count=0;
  struct n{
    unsigned char b[4];
  };
  struct s{
    unsigned char *a;
  };
  unsigned char *d=NULL; 
  struct s m[2];
  struct n w[2];
  strcpy(w[0].b,"eng");
  strcpy(w[1].b,"fre");
  d = w[1].b; // current lang
  m[0].a = w[0].b; // storing the 2 lang in a pointer inside a structure
  m[1].a = w[1].b;
  for (i =0; i <= 1; i++) {
    printf("\nm[%d].a: %s d: %s\n", i, m[i].a, d);
    if (strcmp(m[i].a, d) != 0) {
      printf("Not equal\n");
    }
    else{
      printf("\nEqual\n");
    }
  }
  return 0;
}
于 2012-07-22T08:17:52.827 に答える