将指针值放在数组中

时间:2013-06-20 12:04:29

标签: c arrays

我有以下部分代码:

         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]);
}

3 个答案:

答案 0 :(得分:2)

假设您已经将您的值放入“机器,号码,小时,dw,vcc”(谁是char*

你不能将它们存储到你的char table1 [1] [10]中,因为它是一个数组表,只能包含一个10个字符的数组。

所以你需要一个看起来像这样的字符:

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]?

答案 1 :(得分:0)

目前尚不清楚你究竟想要什么,只是在试一试

char table1[1][10]={0};    
    table1[0][5]= machine;
    table1[0][6]=number;
    table1[0][7]=hr;
    table1[0][8]=dw;
    table1[0][9]=vcc;

答案 2 :(得分: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);

在第二段代码中,我将摆脱外部for循环,然后写:

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

鉴于您确实只有一个这样的数组,如您的声明所示。

请注意,上述解决方案只能在函数内部本地工作,因为返回局部变量不起作用。为了能够全局使用表结构,您可能希望将malloc()strcpy()值放入数组中。