繁体   English   中英

CStringT到char []

CStringT to char[]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试更改一些遗留代码。 我需要使用filename.Right(3)填充一个char[] ext文件扩展filename.Right(3) 问题是我不知道如何从CStringT转换为char[]

必须有一个非常简单的解决方案,我只是没有意识到......

TIA。

5 个回复

如果您可以访问ATL,我想您在使用CString时可以访问,那么您可以查看ATL转换类,如CT2CA。

CString fileExt = _T ("txt");
CT2CA fileExtA (fileExt);

如果需要执行转换(如编译Unicode时),则CT2CA会分配一些内部存储器并执行转换,从而破坏其析构函数中的内存。 如果编译ANSI,则不需要执行转换,因此它只是挂起指向原始字符串的指针。 它还提供了对const char *的隐式转换,因此您可以像任何C风格的字符串一样使用它。

这使得转换变得非常简单,但需要注意的是,如果在CT2CA超出范围后需要挂起字符串,则需要将字符串复制到您控制下的缓冲区中(而不仅仅是存储指向它的指针)。 否则,CT2CA会清理转换后的缓冲区,并且您有一个悬空参考。

好吧,你甚至可以在unicode中做到这一点

char str[4];
strcpy( str, CStringA( cString.Right( 3 ) ).GetString() );

如果你知道你不使用unicode那么你就可以做到

char str[4];
strcpy( str, cString.Right( 3 ).GetString() );

所有原始代码块都将最后3个字符转换为非unicode字符串(CStringA,CStringW绝对是unicode,CStringT取决于是否设置了UNICODE定义),然后将字符串作为简单的char字符串。

首先使用CStringA来确保你获得char而不是wchar_t 然后将其强制转换为(const char *)以获取指向该字符串的指针,并使用strcpy或类似的东西复制到您的目标。

如果你完全确定你将永远复制3个字符,你可以用简单的方法来做。

ext[0] = filename[filename.Length()-3];
ext[1] = filename[filename.Length()-2];
ext[2] = filename[filename.Length()-1];
ext[3] = 0;

我相信这就是你要找的东西:

CString theString( "This is a test" );
char* mychar = new char[theString.GetLength()+1];
_tcscpy(mychar, theString);

如果我记得我的旧学校MS C ++。

您没有指定CStringT类型的位置。 它可以是任何东西,包括你自己的字符串处理类的实现。 假设它是来自Visual C ++中可用的MFC / ATL库的CStringT,您有几个选择:

如果使用或不使用Unicode进行编译,则不会说,因此使用TCHAR而不是char

CStringT
    <
    TCHAR,
    StrTraitMFC
        <
        TCHAR,
        ChTraitsCRT<TCHAR>
        >
    > file(TEXT("test.txt"));

TCHAR* file1 = new TCHAR[file.GetLength() + 1];
_tcscpy(file1, file);

如果你使用专门用于ANSI字符串的CStringT,那么

std::string file1(CStringA(file));
char const* pfile = file1.c_str(); // to copy to char[] buffer
1 有没有比CStringT <>声明适合char类型的实例更好的方法?

我想要得到的是一个函数,该函数生成适用于给定类型的字符(char或wchar_t)的CStringT &lt;&gt;的实例。 这是一个人为的示例: 我当然可以使用上面的代码(它似乎可以编译),但是如果我可以使用类似以下内容的代码,那么对我的代码读者(可能还有将来的兼容性)会更好一 ...

7 从char **到char *

所以, 我有一个字符**; 本质上是一个带有指向该句子中每个单词的指针的句子; 即 在这种情况下,我希望使用可以接受不同单词数量和字母数的句子的函数来提取最后一个char *(是!)。 有任何想法吗? 到目前为止,我发现有一些库函数可以完成类似的功能,但没有一个库函数可以做 ...

2013-02-19 01:50:24 2 106   c
8 将char **转换为char *或char

我有一个旧程序,其中使用了一些库函数,但是我没有那个库。 因此,我正在使用c ++库编写该程序。 在那个旧代码中,有一些这样的函数 * string = newstrdup(“有些字符串在这里”); 字符串变量声明为char ** string; 他在名为“ newst ...

9 char * to char []

我有char *,它具有固定(已知)宽度但不是空终止。 我想把它传递给LOG4CPLUS_ERROR("Bad string " &lt;&lt; char_pointer); 但由于它的非null终止,它将打印出所有内容。 任何轻量级的方法得到"(char[length])*ch ...

2011-04-05 12:34:14 7 736   c++
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM