标签: cstring

C++中不同字符串类型的优缺点

很抱歉在SO上开始另一个无法回答的问题,但我只是好奇C++中所有不同字符串类型的优缺点.我的特殊问题是在MFC的CStrings和std :: string之间(因为我只使用Windows软件),但这会延伸到C++中的任何字符串格式.你在C++中使用的最佳字符串类型是什么?为什么?

更新:我实际上发现了一个重复的问题.感谢那些已经回答的人.请指出对这个问题的任何新回复: 如何处理C++中的字符串?

c++ string cstring

3
推荐指数
2
解决办法
1687
查看次数

哪个是在C/C++中将BSTR参数转换为ANSI的更好代码?

到目前为止,我发现我可以用两种(多种?)方式将传入的BSTR转换为ANSI,我很想知道在速度/效率等方面是否比另一种"更好".

我一直使用的方式是使用USES_CONVERSIONW2A宏,例如

BSTR __stdcall F(BSTR p1, BSTR p2 ) {
    USES_CONVERSION;

    LPSTR sNum1 = W2A( p1 );
    LPSTR sNum2 = W2A( p2 );
Run Code Online (Sandbox Code Playgroud)

然而,最近我遇到了另一种技术:

BSTR __stdcall F(BSTR p1, BSTR p2 ) {
    long amt = wcstombs( NULL, p1, 1 );
    sNum1 = (char *) malloc( amt ); 
    wcstombs( sNum1, p1, amt );
    *(sNum1 + amt) = '\0';

    amt = wcstombs( NULL, p2, 1 );
    sNum2 = (char *) malloc( amt ); 
    wcstombs( sNum2, p2, amt ); …
Run Code Online (Sandbox Code Playgroud)

c c++ string bstr cstring

3
推荐指数
1
解决办法
4761
查看次数

在改变c字符串时避免内存泄漏

出于教育目的,我在一些测试程序中使用cstrings.我想用占位符缩短字符串,例如"......".

也就是说,如果我的最大长度设置为13 ,"Quite a long string"则会变为"Quite a lo..."13.此外,我不想破坏原始字符串 - 因此缩短的字符串必须是副本.

下面的(静态)方法是我提出的.我的问题是:为类缩短的字符串分配内存的类是否也应该负责释放它? 我现在所做的是将返回的字符串存储在单独的"用户类"中,并将内存释放到该用户类.

const char* TextHelper::shortenWithPlaceholder(const char* text, size_t newSize) {
    char* shortened = new char[newSize+1];

    if (newSize <= 3) {
        strncpy_s(shortened, newSize+1, ".", newSize);
    }
    else {
        strncpy_s(shortened, newSize+1, text, newSize-3);
        strncat_s(shortened, newSize+1, "...", 3);  
    }
    return shortened;
}
Run Code Online (Sandbox Code Playgroud)

c++ connection-string memory-management cstring

3
推荐指数
2
解决办法
1305
查看次数

CStringT到char []

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

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

TIA.

c++ cstring

3
推荐指数
1
解决办法
5153
查看次数

C中的简单字符串运行时错误?

这段代码编译得很好,但在运行时会出现分段错误错误?有谁能说出原因?

#include <stdio.h>
#include <string.h>
#include <math.h>

int main() {
    const char s2[] = "asdfasdf";
    char* s1;

    strcpy(s1, s2);
    printf("%s", s1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c memory-management cstring

3
推荐指数
1
解决办法
750
查看次数

链接错误CString

我使用CString收到链接器错误,错误是:

error LNK2001: unresolved external symbol "private: static class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > CConfiguration::_campaignFolderPath" (?_campaignFolderPath@CConfiguration@@0V?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@A)
Run Code Online (Sandbox Code Playgroud)

我有一个类定义为:

class CConfiguration
{
private:
    static CString _campaignFolderPath;

public:
    static void Read();

private:
    CConfiguration(void);
    ~CConfiguration(void);
};
Run Code Online (Sandbox Code Playgroud)

其Read方法定义为:

void CConfiguration::Read()
{
    CConfigFile configReader(_T("Config.ini"));
    TCHAR temp[1024];

    configReader.GetStringValue(_T("Campaigns"), _T("CampaignsFolderPath"), temp);

    _campaignFolderPath = temp;
}
Run Code Online (Sandbox Code Playgroud)

有关导致错误的原因的任何线索?我正在使用Visual Studio 2008

c++ linker mfc cstring

3
推荐指数
1
解决办法
2346
查看次数

为什么我不能初始化像这样的cstrings数组?

char sXSongBuffer[20][30];
sXSongBuffer = {"Thriller", "Don't Stop Till You Get Enough", "Billy Jean"};
Run Code Online (Sandbox Code Playgroud)

为什么会返回错误expected expression before ‘{’ token?我想这样初始化我的数组的原因是我可以在以后改变它的内容:

sXSongBuffer = {"New Song", "More Music From Me"};
Run Code Online (Sandbox Code Playgroud)

c cstring

3
推荐指数
1
解决办法
4069
查看次数

反转一个字符串,奇怪的输出c ++

好吧,所以我试图在C++中反转一个C风格的字符串,我正在寻找一些奇怪的输出.也许有人能说出一些亮点?

这是我的代码:

 int main(){    

    char str[] = "string";
    int strSize = sizeof(str)/sizeof(char);

    char str2[strSize];

    int n = strSize-1;
    int i =0;


    while (&str+n >= &str){ 
        str2[i] = *(str+n);         
        n--;
        i++;
    }

    int str2size = sizeof(str)/sizeof(char);
    int x;

    for(x=0;x<str2size;x++){
        cout << str2[x];
    }

}
Run Code Online (Sandbox Code Playgroud)

这里的基本思想是将指针指向字符串的结尾,然后使用指针算法将其向后读入新数组.

在这种特殊情况下,我得到一个输出:"gnirts"在任何输出的开头有一个烦人的空间,我假设是空字符?但是当我试图通过递减strSize变量来排除它时,我最终在字符串另一端的一些其他字符可能来自另一个内存块.

有关如何避免这种情况的任何想法?PS :(你们会认为这是扭转字符串的好主意吗?)

c++ string reverse char cstring

3
推荐指数
1
解决办法
615
查看次数

返回一个空的C-String

简单问题:

如何使用尽可能少的代码返回空C-String?

我有需要返回空的代码char*.我正在寻找一些类似的东西return "";.我知道有几种方法可以做到这一点,但我正在寻找最有效的方法.

使用return "";给出warning: conversion from string literal to 'char *' is deprecated [-Wdeprecated-writable-strings]

谢谢!

c++ return c-strings cstring

3
推荐指数
1
解决办法
1万
查看次数

从int到c-string(const char*)的转换失败

我无法转换int为c-string(const char*):

int filenameIndex = 1;      
stringstream temp_str;
temp_str<<(fileNameIndex);
const char* cstr2 = temp_str.str().c_str();    
Run Code Online (Sandbox Code Playgroud)

没有错误但cstr2没有达到预期值.它用一些地址初始化.

怎么了,怎么解决?

c++ string pointers type-conversion cstring

3
推荐指数
2
解决办法
1万
查看次数