标签: cstring

将CString转换为字符数组?

如何将MFC中的CString转换为char [](字符数组)

c++ char cstring visual-c++

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

我使用哪种宽字符串结构?CString vs wstring

我在C++中有一个使用std :: string和std :: wstring的MFC应用程序,并经常从一个转换为另一个,还有很多其他的废话.我需要将所有内容标准化为单一格式,所以我想知道是否应该使用CString或std :: wstring.

在应用程序中,我需要从字符串表生成字符串,处理大量需要常量tchar或wchar_t指针的Windows调用,编辑控件,并与需要BSTR的COM对象API进行交互.

我也有字符串向量,所以CStrings向量有什么问题吗?

哪一个更好?各自的优点和缺点是什么?

例子

BSTR到wstring

CComBSTR tstr;  
wstring album;  
if( (trk->get_Info((BSTR *)&tstr)) == S_OK  && tstr!= NULL)  
    album = (wstring)tstr;
Run Code Online (Sandbox Code Playgroud)

wstring到BSTR

CComBSTR tstr = path.c_str();  
if(trk->set_Info(tstr) == S_OK)
    return true;
Run Code Online (Sandbox Code Playgroud)

字符串资源到wstring

CString t;
wstring url;
t.LoadString(IDS_SCRIPTURL);
url = t;
Run Code Online (Sandbox Code Playgroud)

GetProfileString()返回一个CString.

整数到字符串格式:

wchar_t total[32];
swprintf_s(total, 32, L"%d", trk->getInt());
wstring tot(total);
Run Code Online (Sandbox Code Playgroud)

string com mfc cstring wstring

7
推荐指数
2
解决办法
3489
查看次数

只需加密C中的字符串即可

我正在尝试加密我在打开网址时正在制作的游戏上的查询字符串.它并不复杂,实际上因为我在游戏引擎上工作所以它需要尽可能简单.如果我的等级过低,往往会大惊小怪.

我已经创建了查询字符串,我只需要获取它的每个字符并从字符中减去15以轻微加密它.我只是想做一个能阻止大多数用户的简单加密.

我希望我能给出一个代码示例,但我对C没有太多经验,我甚至不确定从哪里开始.游戏引擎的api通常会让一切变得简单.

c encryption cstring query-string

7
推荐指数
4
解决办法
5万
查看次数

(如何)我可以使用带有c字符串(char指针)的Boost字符串算法库?

是否有可能以某种方式调整c风格的字符串/缓冲区(char*wchar_t*)以使用Boost字符串算法库

也就是说,例如,它的trim算法具有以下声明:

template<typename SequenceT> 
void trim(SequenceT &, const std::locale & = std::locale());
Run Code Online (Sandbox Code Playgroud)

并且实现(查找trim_left_if)要求序列类型具有成员函数erase.

我怎么能用原始字符指针/ c字符串缓冲区?

char* pStr = getSomeCString(); // example, could also be something like wchar_t buf[256];
...
boost::trim(pStr); // HOW?
Run Code Online (Sandbox Code Playgroud)

理想情况下,算法可以直接在提供的缓冲区上工作.(尽可能.如果算法需要在"字符串"中分配额外的空间,它显然无法工作.)


@Vitaly问道:为什么你不能从char缓冲区创建一个std :: string然后在算法中使用它?

我有char*的原因是我想在我们现有的代码库上使用一些algorthims.将所有char缓冲区重构为字符串将比其值更多的工作,并且在更改或调整某些内容时,能够将给定算法应用于恰好存在于当前代码中的任何c样式字符串将是一件好事.

使用字符串意味着(a)将char*复制到字符串,(b)将算法应用于字符串,以及(c)将字符串复制回char缓冲区.

c++ string boost pointers cstring

7
推荐指数
1
解决办法
3011
查看次数

如何检查CString是否只包含数字字符

我正在读取文件并解析其内容.我需要确保一个CString值只包含数字.我能实现的不同方法有哪些?

示例代码:

Cstring Validate(CString str)
{
  if(/*condition to check whether its all numeric data in the string*/)
  {
     return " string only numeric characters";
  }
  else
  {
     return "string contains non numeric characters";
  }
}
Run Code Online (Sandbox Code Playgroud)

cstring visual-c++ visual-c++-2005

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

你会如何改进这个算法?(c字符串反转)

通过我在网上找到的一些编程访谈挑战,我不得不编写一个算法来反转一个const char*并返回一个指向新char*的指针.我想我已经拥有它,但是为了让它正常工作,我不得不做一些不稳定的事情 - 基本上我必须自己考虑一个空终止的角色.不知怎的,我觉得这是错的,但我很难过,我想知道是否有人可以帮助我:

char * reverse(const char * str)
{
  int length = strlen(str);
  char * reversed_string = new char[length+1];

  for(int i = 0; i < length; ++i)
  {
    reversed_string[i] = str[(length-1) - i];
  }
  //need to null terminate the string
  reversed_string[length] = '\0';

  return reversed_string;

}

int main(int argc, char * argv[])
{

  char * rev_str = reverse("Testing");

  cout << "Your string reversed is this: " << rev_str << endl;

  delete rev_str;
  rev_str = 0;

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

c++ algorithm cstring

6
推荐指数
3
解决办法
8510
查看次数

环境变量在char*中如何将它转换为std :: string

我正在使用win32检索环境变量GetEnvironmentStrings().它返回一个char*.

我想搜索这个字符串(字符串指针)的特定环境变量(是的,我知道我可以使用,GetEnvironmentVariable()但我这样做,因为我也想在控制台上打印所有的环境变量 - 我只是摆弄) .

所以我想我会转换char*为std :: string并使用find(我知道我也可以使用c_string find函数,但我更关心的是尝试将a复制char*到a中std::string).但是下面的代码似乎并没有将所有内容复制char*std::string(它让我觉得有一个\0字符,char*但它实际上并不是结束).

char* a = GetEnvironmentStrings();
string b = string(a, sizeof(a));
printf( "%s", b.c_str() );  // prints =::= 
Run Code Online (Sandbox Code Playgroud)

有没有办法将a复制char*到a std::string(我知道我可以strcpy()用来复制const char*到字符串而不是a char*).

c++ winapi cstring

6
推荐指数
1
解决办法
2341
查看次数

分段错误:"......没有这样的文件或目录"

我得到了奇怪的seg错误,这似乎是来自某个不在我的程序中的地方......无论如何都没有明确说明.我在两个数组上调用"strcmp"...两个数组都存储在相同类型的结构中.我用点符号得到一个,用" - >"取消引用一个:

int name = strcmp(one.name, two->name);
Run Code Online (Sandbox Code Playgroud)

它编译得很好但是当我运行它时我得到了seg错误.我尝试用GDB跟踪它,但是当我在我认为它应该发生之前放置断点时,无论如何它都会出现故障.我越来越:

Program received signal SIGSEGV, Segmentation fault.
__strcmp_ia32 () at ../sysdeps/i386/i686/multiarch/../strcmp.S:40
40  ../sysdeps/i386/i686/multiarch/../strcmp.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../strcmp.S
Run Code Online (Sandbox Code Playgroud)

FML.建议?谢谢!

c++ cstring segmentation-fault

6
推荐指数
1
解决办法
5832
查看次数

std :: string :: c_str()如何返回一个不会导致内存泄漏或未定义的c-string内容的c-string?

我正在编写一个类似于std :: string的字符串类作为家庭作业,但我无法弄清楚如何返回一个不会导致内存泄漏的c字符串,并保证保持不变直到它不存在使用时间更长.我目前有:

const char* string::c_str()
{
    char c[_size+1];
    strncpy(c,_data,_size);
    c[_size]='\0';
    return c;
}
Run Code Online (Sandbox Code Playgroud)

但是在调用之后不久就会覆盖内容.如果我进行动态分配,我会有内存泄漏,或者任何时候只能从给定的字符串中存在一个c字符串.我怎么能避免这个?

c++ memory string cstring

6
推荐指数
1
解决办法
2204
查看次数

我应该如何为c-string char数组分配内存?

因此,在尝试学习如何在C++中使用C-Strings时,我遇到了内存分配问题.

这里的想法是创建一个新的字符串格式(s1 + sep + s2)我正在使用的文本提供了标题,所以我不能改变它,但我遇到了试图设置大小的问题char str [].我收到一个错误,说sLength不是常量,因此不能用于设置数组的大小.我对C++比较陌生,所以这是一个两部分问题.

  1. 这个策略实际上是为新阵列分配内存吗?

  2. 如果使用strlen(char*)无法获得常量值,如何正确设置数组大小?

    char* concatStrings(char* s1, char* s2, char sep){
        int sLength = strlen(s1) + strlen(s2) + 3; 
        //+1 for char sep +2 for \0 at end of string
        char *str = new char[sLength];
        strcpy (str, s1);
        str [sLength(s1)] = sep;
        strcat (str, s2);
        return str;
    }
    
    Run Code Online (Sandbox Code Playgroud)

编辑,所以现在我没有编译错误,但...

对函数的调用如下:

    char* str = concatStrings("Here is String one", "Here is String two" , c);
    cout<< str;
Run Code Online (Sandbox Code Playgroud)

我的输出成为:

这里是String onec ================== 22221/21/21/21/2/(等) /这里是String 2

c c++ memory-management string-concatenation cstring

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