执行以下功能:
char * new_string = slice("old string", 3, 5)
我可以这样称呼它:
char * new_string = slice("old string", 3, NULL)
// NULL means ignore the `end` parameter and just go all the way to the end.
在C语言中是否有一种方法可以“忽略”参数?例如,传递如下内容:
response = requests.post('https://www.com', headers=tmp, data=data).json()
x = json.dumps(response, ensure_ascii=False)
print x['aaa']
该怎么做?还是用C做不到?
答案 0 :(得分:1)
可选参数(或具有默认值的参数)在C语言中并不是真正的东西。我认为您可以通过传入'NULL'来获得正确的主意,除了NULL等于0并将其解释为整数。相反,我建议将参数更改为有符号整数,而不是无符号整数,并传入-1作为标志,以指示应忽略该参数。
答案 1 :(得分:0)
只有两种方法可以在C中传递可选参数,并且只有一种是常见的。要么传递一个指向可选参数的指针,然后将NULL理解为未传递,要么将超出范围的值传递为未传递。
方法1:
tab
方法2:
09
顺便说一句,这个示例实际上应该使用char * slice(const char * str, const unsigned int *start, const unsigned int *end);
// ...
const unsigned int three = 3;
char * new_string = slice("old string", &three, NULL)
和#include <limits.h>
char * slice(const char * str, const unsigned int start, const unsigned int end);
char * new_string = slice("old string", 3, UINT_MAX);
,但是我复制了您的原型。
建议的dupe目标正在谈论vardiac函数,该函数确实具有可选参数,但与您的要求不同。在这样的函数调用中,总是有可能通过查看前面的参数来确定该参数是否存在(预期存在)。在这种情况下,那根本没有帮助。