如何在C++中连接以下charTCHAR变量?

TCHAR fileName[50];

TCHAR prefix[5] = "file_";
TCHAR ext[4] = ".csv";
char *id[10];
generateId(*id);
generateId(char *s)函数只是生成一个随机字符串。
我需要以fileName作为file_randomIdGoesHere.csv结束

我试过了strncat(fileName, prefix, 5);,它可以与所有TCHAR变量一起很好地工作,但不能与char *一起工作,因为它需要const char *,所以也许有更好的方法,不确定如何将char *char **转换为const char *

有任何想法吗?

我收到的strncat(fileName, id, 10)错误是error: cannot convert 'char**' to 'const char*'

最佳答案

您看到的错误是因为id数组声明为错误。您声明了一个指针数组而不是一个字符数组。应该更像这样:

char id[10];
generateId(id);

话虽如此,您还向char数组分配了基于TCHAR的字符串文字,这意味着您没有针对Unicode编译项目,否则此类分配将无法编译。因此,您也可以将TCHAR替换为char:
char fileName[50] = {0};

char prefix[] = "file_";
char ext[] = ".csv";
char id[10] = {0};

generateId(id);

然后,您应该将strncat()更改为_snprintf():
_snprintf(filename, 49, "%s%s.cvs", prefix, id);

如果您确实要使用TCHAR,则需要将所有内容更改为TCHAR,并使用TEXT()宏作为文字:
TCHAR fileName[50] = {0};

TCHAR prefix[] = TEXT("file_");
TCHAR ext[] = TEXT(".csv");
TCHAR id[10] = {0};

generateId(id);
__sntprintf(filename, 49, TEXT("%s%s.cvs"), prefix, id);

如果无法将id更改为TCHAR,则必须执行运行时转换:
TCHAR fileName[50] = {0};

TCHAR prefix[] = TEXT("file_");
TCHAR ext[] = TEXT(".csv");
char id[10] = {0};

generateId(id);

#ifdef UNICODE
wchar_t id2[10] = {0};
MultiByteToWideChar(CP_ACP, 0, id, -1, id2, 10);
#else
char *id2 = id;
#endif

__sntprintf(filename, 49, TEXT("%s%s.cvs"), prefix, id2);

09-30 14:49
查看更多