2D массивы и указатели - PullRequest
0 голосов
/ 24 мая 2011

Привет всем, я новичок в указателе, и в следующем коде я пытаюсь сохранить значения двухмерного массива в структуре, а затем распечатать их.Тем не менее, я получаю сообщение об ошибке компиляции в строке: f d->mychar[i] = newptr[i]; Я получаю это, в то время как char * str совпадает с str[], char ** str не совпадает с str[][], но я не могу найти решение, чтобы сделать следующееработа.

typedef struct mystruct{
  char mychar [20][20];
}mystruct_t;

void printvalues ( char ** newptr){
  int i;
  mystruct_t * fd;
  for (i=0;i<3;i++){
    fd->mychar[i] = newptr[i];
    printf("My value is %s and in struct %s\n", newptr[i], fd->mychar[i]);
  }
}
int main (int argc, char **argv){
 int i;
 char * abc[5] = {"123", "456", "789"};

 for (i=0;i<3;i++){
  printf("My value is %s\n", abc[i]);
 }
 printvalues(abc);
}

1 Ответ

2 голосов
/ 24 мая 2011

Большая часть проблемы заключалась в использовании нераспределенной структуры.Вы использовали указатель на mystruct_t, но никогда не выделяли его.Следующие пробеги для меня:

#include <stdio.h>

typedef struct mystruct
{
   char*  mychar [20];
} mystruct_t;

void printvalues( char** newptr )
{
   int i;
   // note: you used an unallocated pointer in your original code
   mystruct_t fd;
   for ( i = 0; i < 3; i++ )
   {
      fd.mychar[i] = newptr[i];
      printf( "My value is %s and in struct %s\n", newptr[i], fd.mychar[i] );
   }
}

int main( int argc, char **argv )
{
   int i;
   char * abc[5] = { "123", "456", "789" };

   for ( i = 0; i < 3; i++ )
   {
      printf( "My value is %s\n", abc[i] );
   }
   printvalues( abc );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...