C ++-在打印char *时为std :: cout指定最大字符

时间:2018-08-03 13:19:52

标签: c++ std c++17

假设我有一个const char *,我想用std :: cout打印,但是我只想打印前X个字符。有没有办法告诉std :: cout? (无需在字符串中插入终止空值或进行临时复制。)

3 个答案:

答案 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)

我不知道kwargs.viewkeys()的这种功能,但是您可能想在std::cout上看到示例here

例如:

printf()

答案 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。