【问题标题】:Unable to put values into either string array or string pointers via a function无法通过函数将值放入字符串数组或字符串指针
【发布时间】:2011-11-23 15:35:59
【问题描述】:

我有一个程序,其中有一个 200 个字符的字符串,我将其拆分为多个段,并尝试将这些段放入 2d char 数组或通过函数指向字符串的指针数组,但没有成功。我可以在 main 中成功地做到这一点,但是当我将字符串和 2d char 数组或指针数组传递给函数时,它不起作用。当我在函数中打印二维数组时,它显示一切正常,但是当我在 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  

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

请注意,我还尝试将指针作为引用传递,因为如果缓冲区是对原始字符串字符数组的引用,那么我将指向它而不是临时字符串。但诚然,我对临时变量了解不多。

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" 

【问题讨论】:

  • 这不是“简化”,这是一个无效的程序。请发布一个可以编译、运行并显示错误的 sn-p。
  • 感谢您的回复,我已经添加了一段更详细的代码。如果您需要更多,请告诉我
  • 我还没有撤消我的 -1。您不应该发布包含明显语法错误的程序。
  • 您好,我刚刚更新了输出以使其更清晰
  • 您指的是什么语法错误?这在我的电脑上编译得很好。

标签: c arrays string return parameter-passing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您似乎只复制了一个片段,而不是所有片段。您是否打算将 func 调用来自 for 循环?

    【讨论】:

    • 感谢您的回复。是的,它采用 for 循环的形式,否则我将无法在函数中正确打印所有 file_list[i] 变量。当我尝试在 main 函数之外打印文件列表时,它只会打印以我上面指示的方式复制的最后一个值。
    • 谢谢,但我想结束这个问题,因为我发现我的问题是我在指向指针字符的指针中使用了错误的符号。
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多