相关疑难解决方法(0)

863
推荐指数
7
解决办法
89万
查看次数

C++中的String.Format替代品

我没有太多使用C++的经验.相反,我在C#中工作得更多,所以,我想问一下我在那里会做些什么.我必须生成一个特定的字符串格式,我必须传递给另一个函数.在C#中,我可以通过以下简单代码轻松生成字符串.

string a = "test";
string b = "text.txt";
string c = "text1.txt";

String.Format("{0} {1} > {2}", a, b, c);
Run Code Online (Sandbox Code Playgroud)

通过生成这样一个上面的字符串,我应该能够通过它system().但是,system只接受char*

我在Win32 C++(不是C++/CLI),并且不能使用,boost因为它包含太多包含项目本身非常小的所有文件.喜欢的东西,sprintf()在我看来是有用的,但sprintf不接受stringa,bc参数.有什么建议我如何生成这些格式化的字符串以传递给我的程序中的系统?

c# c++ string string-formatting

28
推荐指数
4
解决办法
10万
查看次数

有没有办法获得std:string的缓冲区

有没有办法获得"原始"缓冲区oa std :: string?
我在想类似的东西CString::GetBuffer().例如,使用CString我会这样做:

CString myPath;  
::GetCurrentDirectory(MAX_PATH+1, myPath.GetBuffer(MAX_PATH));  
myPath.ReleaseBuffer();  
Run Code Online (Sandbox Code Playgroud)

那么,std :: string有类似的东西吗?

c++ winapi stl stdstring

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

使用std :: string与C风格API交互时,是否可以避免使用临时缓冲区?

我应该在这个问题前面说我认为答案可能不是,但我想看看其他人对这个问题的看法.

我花了大部分时间编写与Win32 API交互的C++,就像大多数C风格API想要的那样:

  1. 拿我提供的缓冲液并对它们进行操作.
  2. 或者返回指向我需要稍后释放的缓冲区的指针.

这两种情况本质上都意味着如果你想std::string在你的代码中使用,你必须接受这样一个事实,即你每次std::string从临时缓冲区构造一个字符串时都会进行大量的字符串复制.

什么会很好:

  1. 能够允许C风格API安全地直接改变std::string并预先保留其分配并提前设置其大小(以缓解方案1)
  2. 能够包裹std::string现有的char[](以缓解方案2)

有没有一种很好的方法来做其中任何一种,或者我应该接受使用std::string旧学校API 的固有成本?看起来情况1看起来特别棘手,因为它std::string有一个短的字符串优化,因此它的缓冲区可以在堆栈或堆上,具体取决于它的大小.

c c++

8
推荐指数
1
解决办法
952
查看次数

什么是 C++ 中对“char()”、“uint8_t()”、“int64_t()”、整数“T()”等的调用?

我以前从未见过这个函数的调用char()。这是在哪里描述的,它是什么意思?此用法是此 cppreference.com 社区 wiki 页面上示例的一部分:https://en.cppreference.com/w/cpp/string/basic_string/resize

short_string.resize( desired_length + 3 );
std::cout << "6. After:  \"";
for (char c : short_string) {
    std::cout << (c == char() ? '@' : c);  // <=== HERE ===
}
Run Code Online (Sandbox Code Playgroud)

描述中的措辞对我来说也没有任何意义,我不明白它在说什么:

将附加字符初始化为CharT().

在上下文中突出显示:

在此输入图像描述

相邻相关

  1. 促使我研究该std::string::resize()方法的原因是尝试学习如何预先分配 astd::string以便在 C 函数调用中用作缓冲区char*。这可以通过首先std::string调用my_string.resize()函数来预分配 来实现。然后,您可以安全地&my_string[0]作为标准char*写入索引my_string.size() - 1。也可以看看:
    1. 直接写入 std::string 的 char* 缓冲区
    2. 有没有办法获取 std:string 的缓冲区
    3. 如何将 a 转换std::string …

c++ initialization char

0
推荐指数
1
解决办法
425
查看次数

使用memcpy的垃圾

我正在使用memcpy将特定数量的字符从char数组复制到char*.但是当我读到char*时,最终总是垃圾.

我正在使用libssh2 lib向我的raspberry pi发送命令并接收输出.

libssh2_channel_read将返回输出的字符数,int x输出文本将在char buffer[32].

我正在使用的代码:

char buffer[32];
int x = libssh2_channel_read(channel, buffer, sizeof(buffer));
char * output = (char *)malloc(sizeof(char)*x);
memcpy(output, buffer, x-2); // x - 2 because of "\r\n"
libssh2_channel_free(channel);
channel = NULL;
cout << output << endl;
Run Code Online (Sandbox Code Playgroud)

输出示例:

0??²²²²
Run Code Online (Sandbox Code Playgroud)

我只想要 0

c++ arrays string char

-1
推荐指数
1
解决办法
411
查看次数

标签 统计

c++ ×6

char ×3

string ×3

arrays ×1

c ×1

c# ×1

const ×1

initialization ×1

stdstring ×1

stl ×1

string-formatting ×1

winapi ×1