如何在C++中连接以下char
和TCHAR
变量?
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);