无法通过函数将值放入字符串数组或字符串指针中

时间:2011-11-23 15:36:00

标签: c arrays string return parameter-passing

我有一个程序,其中我有一个200字符的字符串,我分成几段,我正在尝试,但没有成功,将这些段放入2d char数组或通过函数指向字符串的指针数组。我可以在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));  
}  

“func”中的printf输出是:

Segment one  
Segement two  
 ……  
Segment n  

main的printf输出是:

Segment n  
Segment n  
…..  
Segment n  

请在下面找到更详细的功能。我假设您不需要查看变量声明列表。

请注意,我也尝试将指针作为引用传递,并认为如果buffer是对原始字符串字符数组的引用,那么我将指向那个而不是临时字符串。但不可否认的是,我对临时变量知之甚少。

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 个答案:

答案 0 :(得分:1)

感谢您的回复。我发现问题与以不正确的方式从函数返回数据无关,但是由于我对指针数组的指针使用了错误的表示法。但是,任何关于从函数返回数据的好参考都会受到赞赏,因为网上似乎存在相互矛盾的信息。例如,我认为您不需要声明指向指针的指针,以通过引用传递指针。至少通过实验我发现我能够更改指针数组值,而不会将指针数组的指针传递给函数,就像通过引用传递普通变量一样。

答案 1 :(得分:0)

好像你只复制了一个细分而不是全部细分。您是否打算func来自for循环?