小编pee*_*r_2的帖子

将参数传递给void(*)(void*)

我在C++中包装了一些sqlite3 C代码,并void(*)(void*)对此函数中的这种类型的参数感到困惑

int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));

所以我的包装看起来像

int Query::Blob(int index, const void* blob, int blob_size, void* memory_management){
   return sqlite3_bind_blob(stmt, index, blobl, blob_size, memory_management);
}
Run Code Online (Sandbox Code Playgroud)

我应该能够将以下内容传递给最后一个参数

  1. 一些功能可以释放blob内存

  2. 无论是SQLITE_STATICSQLITE_TRANSIENT定义

这两个定义不出所料地定义为

typedef void (*sqlite_3_destructor_type)(void*);

但我真的不明白void/void语法.如何在我的C++方法中包装它以接受类似函数delete或定义?

c++ sqlite

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

stcat ::字符串上的strcat转换为char*

我在代码库中找到了这个(简化的)代码片段,这让我觉得不愉快.它既可以工作,也可以工作,或者永远不会被调用.我希望有一些缓冲区溢出,但是当我在一个在线编译器中尝试它时,它肯定不起作用,但也不会溢出.我正在查看strcat它的定义,它将从其null终止符开始将源写入目标,但我假设在这种情况下,目标缓冲区(创建为a std::string)应该太小..

#include <iostream>
#include "string.h"

using namespace std;

void addtostring(char* str){
    char str2[12] = "goodbye";
    strcat(str, str2);
}

int main()
{
    std::string my_string = "hello";
    addtostring((char*)my_string.c_str());

    cout << my_string << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个操作的实际行为是什么?

c++

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

标签 统计

c++ ×2

sqlite ×1