鱼C论坛

 找回密码
 立即注册
查看: 1578|回复: 3

[已解决]指针将函数中字符串传回问题求助大佬!!!

[复制链接]
发表于 2021-1-2 18:12:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
test1:

#include<stdio.h>


void s(char** t)
{
        * t = "fishc";
}
main()
{
        char* a;
        s(&a);
        printf("%s", a);

}

test2:

#include<stdio.h>


void s(char** t)
{
        char temp[10] = "sb";
        //*t = temp;
        //strcpy(*t,temp);
       //t=&temp;
}
main()
{
        char* a;
        s(&a);
        printf("%s", a);

}




求助大佬,我现在想把函数中的字符串通过指针带回,test1直接赋值,可以正常返回。test2中把变量中存储的字符串无法带回,不管用*t = temp;或者strcpy(*t,temp);或者t=&temp;都不行。求助大佬,谢谢了
最佳答案
2021-1-3 00:30:56
本帖最后由 jackz007 于 2021-1-3 00:38 编辑

      怎么搞,别的不说,szResult 应该是在 main() 中定义的二维字符数组,而不能是一个指向字符的二级指针就好。当然,如果 szResult 的返回值是在函数 FileManager_Read_File() 中,使用 malloc() 函数分配到内存的首地址的话,那就应该另当别论了,因为,只要是通过 malloc() 分配到的内存,不论是在那个函数中被分配到的,在程序的整个生命周期内,都会受到保护。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-2 22:05:18 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-2 22:14 编辑

        有一个基本概念,函数中的局部变量都是临时的,只在函数被调用期间存在,调用结束后,所有这些局部变量所占用的内存会立即被释放,就是说,这些内存会即刻被操作系统挪作它用,本来保存在其中的内容会随时被改变,所以,必须明白,作为一个原则,任何时候都不能指望其它函数中的任何一个局部变量。哪怕是一个刚刚被调用过的函数!明白了这个概念就应该清楚,想从函数中获得字符串,不应该只是传给函数一个指针,在函数返回时,让它指向函数内一个局部变量的地址,而是必须传入一个 "盒子",把需要得到的字符串 "装到盒子里",就是说,应该保证把字符串保存到属于调用而不是被调用函数的变量存储空间。
#include<stdio.h>


void s(char * t)
{
        char temp[10] = "sb" ;
        strcpy(t , temp)     ;
}

int main(void)
{
        char a[64]           ;
        s(a)                 ;
        printf("%s", a)      ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-2 23:58:55 | 显示全部楼层
jackz007 发表于 2021-1-2 22:05
有一个基本概念,函数中的局部变量都是临时的,只在函数被调用期间存在,调用结束后,所有这些局部 ...

感谢老师,这个我搞明白了。但是现在有一个需求,void FileManage_ReadFile(char* szPath, DWORD nPos, DWORD nSize, char** szResult),最后我的格式化输出需要用char** szResult传递回main中,请问这个是怎么搞的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-3 00:30:56 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-3 00:38 编辑

      怎么搞,别的不说,szResult 应该是在 main() 中定义的二维字符数组,而不能是一个指向字符的二级指针就好。当然,如果 szResult 的返回值是在函数 FileManager_Read_File() 中,使用 malloc() 函数分配到内存的首地址的话,那就应该另当别论了,因为,只要是通过 malloc() 分配到的内存,不论是在那个函数中被分配到的,在程序的整个生命周期内,都会受到保护。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表