【发布时间】: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