汽车行业工程师 发表于 2021-1-2 18:12:51

指针将函数中字符串传回问题求助大佬!!!

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 = "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;都不行。求助大佬,谢谢了

jackz007 发表于 2021-1-2 22:05:18

本帖最后由 jackz007 于 2021-1-2 22:14 编辑

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

#include<stdio.h>


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

int main(void)
{
      char a         ;
      s(a)               ;
      printf("%s", a)      ;
}

汽车行业工程师 发表于 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中,请问这个是怎么搞的。

jackz007 发表于 2021-1-3 00:30:56

本帖最后由 jackz007 于 2021-1-3 00:38 编辑

      怎么搞,别的不说,szResult 应该是在 main() 中定义的二维字符数组,而不能是一个指向字符的二级指针就好。当然,如果 szResult 的返回值是在函数 FileManager_Read_File() 中,使用 malloc() 函数分配到内存的首地址的话,那就应该另当别论了,因为,只要是通过 malloc() 分配到的内存,不论是在那个函数中被分配到的,在程序的整个生命周期内,都会受到保护。
页: [1]
查看完整版本: 指针将函数中字符串传回问题求助大佬!!!