gpt4 book ai didi

c - 返回 char 指针的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 20:02:27 25 4
gpt4 key购买 nike

像 C 中的 char 指针一样返回或传递字符串的最佳方法是什么?

我有一个看起来像这样的函数:

char *test_getcwd(){
char *cwd;
char *ret;
if ((cwd = getcwd( ret, pathconf(".",_PC_PATH_MAX) )) == NULL){
perror ( "Error on calling getcwd() function" );
}else if (__INCLUDE_LEVEL__ == 0){
puts( cwd );
}
free( cwd );
return ret;
}

我应该将其更改为:

int test_getcwd(const **pass){
char *cwd;
char *ret;
if ((cwd = getcwd( ret, pathconf(".",_PC_PATH_MAX) )) == NULL){
perror ( "Error on calling getcwd() function" );
}else if (__INCLUDE_LEVEL__ == 0){
puts( cwd );
}
free( cwd );
*pass = ret;
return 0;
}

或者保持原样或者更改为其他内容?

可能有人问过类似的问题,但我的目标是找到最佳实践。

最佳答案

我确信这是重复的,但是......

可以通过三种基本方法从函数返回指向字符串(或更一般地说是数组)的指针,所有这些方法都可能非常不方便。

  • 您可以返回指向函数内定义的静态数组的第一个元素的指针。数组的大小必须是编译时常量,并且您将为每个调用重复使用相同的数组,因此连续的调用将破坏先前调用的结果。

  • 您可以要求调用者传递指向数组第一个元素的指针,可能还需要另一个参数来指定其大小。这给调用者带来了负担,调用者必须管理分配和释放,并且可能没有好的方法来知道所需的大小。

  • 您可以使用malloc在堆上分配数组。这是最灵活的方法,但它使调用者负责释放数组。

不能只在函数内定义一个数组并返回指向其第一个元素的指针。当函数返回时,数组将不再存在,留下一个悬空指针。

关于c - 返回 char 指针的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com