我是一名C语言初学者,如果我的问题太过简单,请见谅。
解决这个问题的最有效方法是什么:假设你有一个字符数组ORIG,经过处理后,你应该有一个新的字符数组DEST。因此,如果我想为此创建一个函数,最好的方法是:
- 一个只接受一个char数组参数(参数ORIG)并返回一个char数组DEST的函数;或者
- 一个无返回值的函数,它接受两个char数组参数,并根据需要更改DEST。
谢谢!
我是一名C语言初学者,如果我的问题太过简单,请见谅。
解决这个问题的最有效方法是什么:假设你有一个字符数组ORIG,经过处理后,你应该有一个新的字符数组DEST。因此,如果我想为此创建一个函数,最好的方法是:
谢谢!
strdup()
这样复制字符串的函数,这可能是正确的做法。这也意味着调用者在不再需要结果时必须使用free()
。char result[256];
func(result, "bla bla");
因此,使用一个自动对象来保存结果。这也有好处,你可以使用实际的返回值来表示错误。
/* Returns 0 on success, 1 on failure
Requires : inputSize <= outpuSize
input != output
input != null
output != null
*/
int DoStuff (char* output, size_t outputSize, char* input, size_t inputSize);
抱歉,如果这不是正确的C语言代码,因为已经过了几十年 :)
(根据Felix Palmen的建议进行了编辑。)
size_t
表示大小;2)(有争议的)将 输出 参数放在第一位,因为大多数 C 函数都是这样做的。 - user2371524这两种方法都是有效的,但我建议使用后者,因为它意味着您可以将内容加载到任何内存块中,而返回的数组必须在堆上,并按设计进行释放。 再次强调,这两种方法都是有效的,这只是一个指导方针。通常应根据情况来确定应该采取什么措施。
这要看情况而定,如果你知道DEST的长度与ORIG的长度相同,我会选择第二种方法,因为你不需要在函数内动态分配dest的内存(并记得在函数外释放它)。 如果长度不同,你必须动态分配内存,有两种方法: 1. 像你的第一种方法一样-在C语言中返回数组,你必须分配一个新的数组并返回它的地址(指针)。 2. 函数可以接收两个参数,一个是ORIG,另一个是RES的双指针,因为函数接收了一个双指针,它可以在内部分配一个数组,并通过参数返回它。 1-从代码角度来说更加“干净”,从用户体验角度来说更容易使用(用户是调用者)
祝你好运!