假设我有一个const char *,我想用std :: cout打印,但是我只想打印前X个字符。有没有办法告诉std :: cout? (无需在字符串中插入终止空值或进行临时复制。)
答案 0 :(得分:5)
C ++ 17引入了string_view
#include <string_view>
#include <iostream>
char message[] = { "my long char message" };
int length = some_number;
int main() {
string_view str(message);
std::cout << str.substr(0, length) << std::endl;
}
我没有尝试编译以上代码。 string_view
基本上是一个字符串,只是它不“拥有”其内容(使用后不会删除内部指针)。
答案 1 :(得分:0)
答案 2 :(得分:-3)
如果要与任何标准兼容,可以创建一个简单的宏:
#define CROPPED_STRING(str, len) ( (str.size() <= len) ? (str) : (str.substr(0, len)) )
并以这种方式使用它:
std::cout << CROPPED_STRING("Hello World", 7) << std::cout;
显示Hello W
。
(可选)您可以在len
上添加控件,以确保其> 0。