我有一个程序,其中我有一个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"
答案 0 :(得分:1)
感谢您的回复。我发现问题与以不正确的方式从函数返回数据无关,但是由于我对指针数组的指针使用了错误的表示法。但是,任何关于从函数返回数据的好参考都会受到赞赏,因为网上似乎存在相互矛盾的信息。例如,我认为您不需要声明指向指针的指针,以通过引用传递指针。至少通过实验我发现我能够更改指针数组值,而不会将指针数组的指针传递给函数,就像通过引用传递普通变量一样。
答案 1 :(得分:0)
好像你只复制了一个细分而不是全部细分。您是否打算func
来自for
循环?