Tag: 可变

为什么sqlite3_open我们使用双指针**而对于sqlite3_prepare我们使用指针*

请纠正我在哪里理解错误。 我读了这个答案https://stackoverflow.com/a/833124/5175709 ,我理解的是,由于对象可能会扩展并耗尽空间,因此内存位置也会改变。但是这里有两个sqlite3语法引用了对象不同。 为什么? sqlite3_open我们有: sqlite3 **ppDb SQLITE_API int SQLITE_STDCALL sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ 对于sqlite3_prepare,我们有: sqlite3 *db SQLITE_API int SQLITE_STDCALL sqlite3_prepare_v2( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of […]

c中具有不同类型参数的可变函数

我想知道在C中是否可以创建一个带有不同类型参数的可变参数函数。 即 void fillDatabase(char* name, int age){ writeToDatabase(name, age); } int main(){ fillDatabase(“Paul”, 19); fillDatabase(“Herbert”); } 在这里,我试图填写一个名称和年龄的数据库。 但也可以用一个名字填充它,而不是年龄。 所以我想知道我是否可以使用相同的function,或者我是否必须写两个不同的function? 在线我只能找到具有相同类型参数的可变函数的示例。 提前致谢!

Variadic C函数打印多个2-D char数组

我需要在C中设置一个可变参数函数,它可以并排打印可变数量的2-D char数组。 我很难弄清楚如何使用va_arg()初始化boards变量。 关键问题是: boards[i] = va_arg(ap, char*[][BOARDSIZE]); 该行产生编译错误(目前, Second argument to ‘va_arg’ is of incomplete type ‘char *[][10]’ ),但基本上我确定我没有做正确的事情。 我只是不确定那是什么东西。 我尝试了几种变化无济于事。 其余的代码应该没问题。 (预先感谢您的任何帮助。) #include #include #define BOARDSIZE 10 void showBoardVariadic(int numArgs, …) { va_list ap; va_start(ap, numArgs); // Assign an array of 2-D char arrays. char *boards[numArgs][BOARDSIZE][BOARDSIZE]; for (int i = 0; i < […]

重复使用可变参数函数参数不起作用

我有一个函数,试图将东西记录到控制台和日志文件,但它不起作用。 第二次使用可变长度参数会将垃圾写入控制台。 有任何想法吗? void logPrintf(const char *fmt, …) { va_list ap; // log to logfile va_start(ap, fmt); logOpen; vfprintf(flog, fmt, ap); logClose; va_end(ap); va_list ap2; // log to console va_start(ap2, fmt); printf(fmt, ap2); va_end(ap2); }