Нет способа определить printf
длину строки, которую вы хотите напечатать. Вам нужно будет печатать каждый символ отдельно:
void printbuf(const char* buffer, int len) {
for (int i = 0; i < len; ++i)
printf("%c", buffer[i]);
}
char buf[] = {'a', 'b', 'c', 0, 'a', 'b', 'c'};
printbuf(buf, 7);
// prints
// abc abc
Вы можете обернуть буфер в string
и распечатать его (если вы не возражаете против дублирования), поскольку NULL
s не разделяют string
s:
char buf[] = {'a', 'b', 'c', 0, 'a', 'b', 'c'};
string strwithnulls(buf, buf + 7); // or as John pointed out, string strwithnulls(buf, 7);
cout << strwithnulls;
// prints
// abc abc
Но еще лучше
вы можете использовать write
из std::ostream
, потому что вы все-таки используете C ++:
char buf[] = {'a', 'b', 'c', 0, 'a', 'b', 'c'};
cout.write(buf, 7); // best yet
Если вы на самом деле используете C (почему вы пометили его C ++?), Вы можете сделать это:
char buf[] = {'a', 'b', 'c', 0, 'a', 'b', 'c'};
fwrite(buf, 1, 7, stdout);