Невозможно поместить значения в строковый массив или строковые указатели через функцию - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть программа, в которой у меня есть строка из 200 символов, которую я разбил на сегменты, и я безуспешно пытаюсь поместить эти сегменты либо в 2-мерный массив символов, либо в массив указателей на строки через функцию.Я могу успешно сделать это в main, но когда я передаю строку символов и массив 2d char или массив указателей в строки функции, это не работает.Когда я печатаю 2d массив внутри функции, он показывает, что все работает отлично, но когда я печатаю возвращенный массив в main, он только печатает конечное значение следующим образом.

Упрощенный пример кода и вывод ниже:

void func(char *buffer, char **file_list) 
{  
  /*split buffer into segments*/  
    Strcpy((*file_list + i), segment);  
    Printf(“i = %d file_list = %s \n”,i, (*file_list + i));  /* this prints the segments perfectly*/  
}  

Main()  
{  
   Func(buffer, file_list);  
  For(i=0;i<n;i++)  
     Printf(“i= %d,split lines in main is %s\n”,i,(*file_list +i));  
}  

Вывод printf внутри «func»:

Segment one  
Segement two  
 ……  
Segment n  

Вывод printf из main:

Segment n  
Segment n  
…..  
Segment n  

Пожалуйста, найдите функцию более подробнониже.Я предполагаю, что вам не нужно видеть список объявлений переменных.

Обратите внимание, что я также пытался передать указатели в качестве ссылок с тем видом, что если бы буфер был ссылкой на исходный массив символов строки, то я бы указывал на это, а не на временные строки.Но по общему признанию я не знаю много о временных переменных.

Void func(char *buffer,  char **file_list)  
{
    newline=strstr(buffer,"\r\n");    
    while (newline != NULL  && (newline-buffer)< READ_SIZE)  
  {  
      temp_var=newline;  
      newline=strstr(newline + 1,"\r\n");  
      if( newline !=NULL )    
      {
          strncpy((*file_list+i),temp_var,(newline-temp_var));  
          printf("i= %d, file_list is %s\n",i, (*file_list+i));  
      }   
   }  
}  

Main()   
{  
    Char *buffer = (char * ) malloc(200*sizeof(char));  
    Char **file_list= blah blah ….  

   /* put 200 char string in buffer*/   

  /*file_list is still empty call func to fill it up*/     

   Func(buffer,file_list);  
   For(i=0;i<n;i++)  
      printf("i= %d, file_list is %s\n",i,(*file_list+i));  
}  

Печать Вывод из функции:

i=0 file list is "segment one"  
i=1 file list is "segment two"  
....  
i=n file list is "segment n"  

Вывод печати из main:

i=0 file list is "segment n"  
i=1 file list is "segment n"  
....  
i=n file list is "segment n" 

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Спасибо за ваши ответы. Я обнаружил, что проблема не связана с неправильным возвратом данных из функции, а связана с тем, что я использовал неправильную запись для указателя на массивы указателей. Тем не менее, любые хорошие ссылки на возврат данных из функций будут приветствоваться, так как в Интернете, похоже, есть противоречивая информация. Например, я не думаю, что вам нужно объявлять указатель на указатель, чтобы передать указатель по ссылке. По крайней мере, экспериментируя, я обнаружил, что смог изменить значения массива указателей, не передавая указатель на массив указателей в функцию так же, как вы передаете нормальную переменную по ссылке.

0 голосов
/ 23 ноября 2011

Похоже, вы копируете только один из своих сегментов, а не все.Вы намеревались сделать вызов func из цикла for?

...