Answers:
基本方法是:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
另一种通常更有用的方法是:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
在这里,您将长度指定为printf()的int参数,该参数将格式中的'*'视为从参数获取长度的请求。
您还可以使用表示法:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
这也类似于“%8.8s”表示法,但是再次允许您在运行时指定最小和最大长度-在以下情况下更实际:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
POSIX规范printf()
定义了这些机制。
-
)以使其达到指定的完整长度。
除了指定固定数量的字符外,还可以使用*
这表示printf从参数中获取字符数:
#include <stdio.h>
int main(int argc, char *argv[])
{
const char hello[] = "Hello world";
printf("message: '%.3s'\n", hello);
printf("message: '%.*s'\n", 3, hello);
printf("message: '%.*s'\n", 5, hello);
return 0;
}
印刷品:
message: 'Hel'
message: 'Hel'
message: 'Hello'
用printf
你可以做
printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
如果您使用的是C ++,则可以使用STL达到相同的结果:
using namespace std; // for clarity
string s("A string that is more than 8 chars");
cout << "Here are the first 8 chars: ";
copy(s.begin(), s.begin() + 8, ostream_iterator<char>(cout));
cout << endl;
或者,效率较低:
cout << "Here are the first 8 chars: " <<
string(s.begin(), s.begin() + 8) << endl;
ostream_iterator<char>(cout)
!而是使用ostreambuf_iterator<char>(cout)
!性能上的差异应该很大。
std::cout.write(s.data(), 8)
。或在现代C ++中std::cout << std::string_view{s.data(), 8}
。
在C ++中,这很容易。
std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, ""));
编辑:将它与字符串迭代器一起使用也更安全,因此您不会耗尽结尾。我不确定printf和string太短会发生什么,但是我猜这可能更安全。
std::cout << someStr.substr(0,8);
更明显。