0

コードの次の部分があります。

         i = 0;
         while (ptr != NULL)
         {
          if (i == 0)
             strcat(machine, ptr); 
          if (i == 2)
             strcat(number, ptr);
          if (i == 4)
             strcat(hr, ptr); 
          if (i == 6)
             strcat(dw, ptr); 
          if (i == 8)
             strcat(vcc, ptr);
          i++;
         }
         printf("Final: %s, %s, %s, %s, %s\n", machine, number, hr, dw, vcc);

そして、私はこれらの結果を持っています:

Final: 3, 34, 56, 67, 56

それらを 5 ~ 9 の位置にある 10 の位置の配列に保存するにはどうすればよいですか? そのようになるために:

0 0 0 0 0 3 34 56 67 56

以下のコードを書いたのですが、テーブルの &machine, &number, &hr, &dw, &vcc の渡し方がわからないので未完成です

FILE *ft = fopen("Desktop/mytext.txt","a+");
struct tm *tp;
time_t t;
char s[80];

t = time(NULL);
tp = localtime(&t);
strftime(s, 80, "%d/%m/%Y  %H:%M:%S", tp);
char table1[1][10];
for(int i = 0; i<1; i++)
{
    fprintf(ft,"%s ",s);
    for(int j = 0; j<10; j++)
    fprintf(ft,"%d ",table1[i][j]);
}
4

3 に答える 3

2

「machine, number, hr, dw, vcc」にすでに値が入っているとしましょう (who are char*)

それらを char table1[1][10] に格納することはできません。これは、10 文字の配列を 1 つだけ含むことができる配列のテーブルだからです。

したがって、次のような char ** が必要です。

char *table1[10] = {0};

table1[5] = machine; 
table1[6] = number;
table1[7] = hr; 
table1[8] = dw; 
table1[9] = vcc;

しかし、それを表示するために問題が発生することはほとんどありませんが、いつでも次のようなことを行うことができます:

for (int i = 0; i < 10; i++)
{
 if (table1[i] == NULL)
   printf("0 ");
else
   printf("%s ", table1[i]);
}
printf("\n");

しかし、あなたの場合、単に int[10] を使用しないのはなぜですか?

于 2013-06-20T12:21:14.937 に答える
0

コードの最初の部分を操作できる場合、考えられる方法は次のとおりです。

   i = 0;
   int offset = 5;
   char* table[1][10];       

   while (ptr != NULL)
     {
      if (i == 0)
         strcat(machine, ptr);
      if (i == 2)
         strcat(number, ptr);
      if (i == 4)
         strcat(hr, ptr); 
      if (i == 6)
         strcat(dw, ptr); 
      if (i == 8)
         strcat(vcc, ptr);
      table[0][5+(i/2)] = ptr;   
      i++;
     }
  printf("Final: %s, %s, %s, %s, %s\n", machine, number, hr, dw, vcc);

コードの 2 番目の部分では、外側の for ループを取り除き、次のように記述します。

   for(int j = 0; j<10; j++)
      fprintf(ft,"%d ",table1[0][j]); 

宣言が示唆するように、実際にはそのような配列が1つしかない場合。

ローカル変数を返すことは機能しないため、上記のソリューションは関数内でローカルにのみ機能することに注意してください。テーブル構造をグローバルに使用できるようにするためにmalloc()strcpy()値を配列に入れることができます。

于 2013-06-20T12:20:59.910 に答える