小编alk*_*ows的帖子

如何区分堆或文字中的字符串?

我有一个用例,我可以获得在内存或文字中分配的字符串指针.现在后者不能被释放,所以如果我通过错误的话就会出问题.有没有办法知道哪一个被分配哪个不分配?

char *b = "dont free me!";
if(!IS_LITERAL(b)) {
    free(b);
}
Run Code Online (Sandbox Code Playgroud)

我想象那样的事情.

我的例子:

场景1:字面意思

char *b = "dont free me!";
scruct elem* my_element = mylib_create_element(b);
// do smth
int result = mylib_destroy_element(my_element); // free literal, very bad
Run Code Online (Sandbox Code Playgroud)

场景2:在堆中

char *b = malloc(sizeof(char)*17); // example
strncpy(b, "you can free me!",17);

scruct elem* my_element = mylib_create_element(b);
// do smth
int result = mylib_destroy_element(my_element); // free heap, nice
Run Code Online (Sandbox Code Playgroud)

用户如何调用mylib_create_element(b);不受我的控制.如果他在mylib_destroy_element崩溃之前释放.所以它必须mylib_destroy_element清理干净.

c

28
推荐指数
5
解决办法
1840
查看次数

如何计算sprintf将产生的输出长度?

目标:将数据序列化为JSON.

问题:我事先不知道整数是多少个字符.

我认为这样做的一个好方法是使用 sprintf()

size_t length = sprintf(no_buff, "{data:%d}",12312);
char *buff = malloc(length);
snprintf(buff, length, "{data:%d}",12312);
//buff is passed on ...
Run Code Online (Sandbox Code Playgroud)

当然我可以使用堆栈变量char a[256]代替no_buff.

问题:但是在C中是否存在像unix这样的一次性写入的实用程序/dev/null?像这样的Smth:

#define FORGET_ABOUT_THIS ...
size_t length = sprintf(FORGET_ABOUT_THIS, "{data:%d}",12312);
Run Code Online (Sandbox Code Playgroud)

ps我知道我也可以通过日志获得整数的长度,但这种方式似乎更好.

c printf

16
推荐指数
3
解决办法
9852
查看次数

普罗米修斯/ PromQL减去两个指标

我有两个不同实例的衡量标准"metric_awesome".我想要做的是从实例2中减去实例一,就像这样

metric_awesome{instance="one"} - metric_awesome{instance="two"}
Run Code Online (Sandbox Code Playgroud)

不幸的是,结果集是空的.有没有人经历过这个?

prometheus

9
推荐指数
2
解决办法
3845
查看次数

为什么匿名函数会丢失对象范围?

匿名函数/闭包是否应该保留创建它的对象的范围?

var myObject = {
foo: "bar",
func: function() {
    var self = this;
    console.log("outer func:  this.foo = " + this.foo);
    console.log("outer func:  self.foo = " + self.foo);
    (function() {
        console.log("inner func:  this.foo = " + this.foo);
        console.log("inner func:  self.foo = " + self.foo);
    }());
}
};
myObject.func();
Run Code Online (Sandbox Code Playgroud)

这种方式产生相同的结果.

var myObject = {
    foo: "bar",
    func: function() {
        var self = this;
        console.log("outer func:  this.foo = " + this.foo);
        console.log("outer func:  self.foo = " + self.foo);
        return function() {
            console.log("inner …
Run Code Online (Sandbox Code Playgroud)

javascript

1
推荐指数
1
解决办法
225
查看次数

标签 统计

c ×2

javascript ×1

printf ×1

prometheus ×1