微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 C 中将变量 Char* 与函数 TEXT() 一起使用

如何解决如何在 C 中将变量 Char* 与函数 TEXT() 一起使用

我有一个变量转换的问题。

我的程序中有这样一个函数

function(Char* request) {
    ret = sqlExecDirect(hstmt,request,sql_NTS);
    // ...
}

但是,此功能不起作用,但是,如果我更改如下所示的行,它会起作用:

function(Char* request) {
    ret = sqlExecDirect(hstmt,TEXT("SELECT * FROM..."),sql_NTS);
    // ...
}

那么,既然我不能执行 TEXT(request),我该如何将我的 sql char* 变量转换为 TEXT() 版本?

解决方法

TEXT(xxx) 宏的结果是 wide 字符串文字 (const wchar_t*) 或 plain 字符文字 ({{1 }}),取决于是否定义了 const char* 宏。

但是,正如您所指出的,您不能在 文字 以外的任何内容上使用宏;因此,它在转换 UNICODE 变量 时没有用。

为了实现您的结果,以同时适用于 Unicode 和非 Unicode 构建的方式,您可以使用 char* 类型的临时缓冲区数组(TCHAR[n] 类型与 { {1}} 宏),然后使用 TCHAR 函数将您的(固定的)TEXT 数据写入其中。

这是一个简短的演示程序,展示了这种“与目标无关”的转换:

char*

您还可以声明一个(静态内联)函数 _stprintf() 来进行转换(但您需要提供一个输出缓冲区,或者在该函数中创建和管理一个):

#include <stdio.h>
#include <tchar.h>
#include <Windows.h>

#define MAXLEN 256

int main()
{
    TCHAR output[MAXLEN]; // Type can be either `char` or `wchar_t`
    const char* input = "SELECT * FROM...";

    _stprintf(output,TEXT("%hs"),input); // Resolves to either "sprintf" or "_swprintf"

    _tprintf(TEXT("%s\n"),output); // Just to show the result!
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。