当前位置:  开发笔记 > 编程语言 > 正文

C++字符串操作

如何解决《C++字符串操作》经验,为你挑选了0个好方法。

我缺乏C++经验,或者说我在垃圾收集语言中的早期学习实际上是在刺激我,我在使用C++中的字符串时遇到了问题.

为了说清楚,使用std :: string或equlivents不是一个选项 - 这是char*的所有方式.

所以:我需要做的是非常简单,基本上归结为连接字符串.在运行时我有2个类.

一个类包含基本文件名形式的"类型"信息.

在标题中:

char* mBaseName;

然后,在.cpp中,它加载了从其他地方传入的信息.

mBaseName = attributes->BaseName;

第二类以后缀形式提供基本文件名的版本信息,它是一个静态类,目前实现如下:

static const char* const suffixes[] = {"Version1", "Version", "Version3"}; //etc.

static char* GetSuffix()
{
    int i = 0;
    //perform checks on some data structures
    i = somevalue;
   return suffixes[i];
}

然后,在运行时,基类创建它需要的文件名:

void LoadStuff()
{
    char* suffix = GetSuffix();
    char* nameToUse = new char[50];
    sprintf(nameToUse, "%s%s",mBaseName,suffix);

    LoadAndSetupData(nameToUse);
}

你可以立即看到问题.nameToUse永远不会被删除,内存泄漏.

后缀是固定列表,但是基本文件名是任意的.创建的名称需要持续超出"LoadStuff()"的末尾,因为不清楚何时以及如何使用它.

我可能担心太多,或者非常愚蠢,但是在其他地方也会发生与LoadStuff()类似的代码,因此需要解决.这令人沮丧,因为我对于看待安全和"非hacky"解决方案的工作方式还不太了解.在C#中,我只想写:

LoadAndSetupData(mBaseName + GetSuffix());

而且不用担心.

任何评论,建议或建议非常感谢.

更新

我调用LoadAndSetupData()的代码的问题是,在某些时候它可能会复制文件名并将其保留在本地,但实际的实例化是异步的,LoadAndSetupData实际上将事物放入队列中,至少在那时,它期望传入的字符串仍然存在.

我不控制这段代码所以我无法更新它的功能.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有