不要在空终止处停止 printf (\0)
Don't stop printf at null termination (\0)
printf 在遇到第一个 \0 时停止打印。
有没有办法强制它继续,例如,如果我的字符串在 \0 之后包含更多字符。
如果您知道字符串的长度为 n
个字符,则可以使用 fwrite
:
输出它
if (n && fwrite(str, 1, n, stdout) != n) {
/* Error handling. */
}
不,不直接。
你可以做的就是把它放在一个循环中
#include <stdio.h>
int main(void) {
char test[] = "one[=10=]two[=10=]three[=10=]four[=10=]"; /* double NUL to terminate data */
char *ptr = test;
do {
ptr += printf("%s\n", ptr); /* add string size + 1 (extra 1 from '\n') */
} while (*ptr);
return 0;
}
如果您知道要显示的空终止字符串的数量:
size_t str_count; // Count of '[=10=]' in my_str
const char * my_str; // Points on contiguous Null terminated strings
for(size_t i=0; i<str_count; i++)
{
printf("%s", my_str);
my_str += 1 + strlen(my_str); // "+1" to skip the `[=10=]`
}
您可以使用 putchar
:
char *buffer = "1234[=10=]ABCD[=10=]hello";
char *s = buffer;
int n = 6;
while (n--)
putchar(*s++);
printf 在遇到第一个 \0 时停止打印。
有没有办法强制它继续,例如,如果我的字符串在 \0 之后包含更多字符。
如果您知道字符串的长度为 n
个字符,则可以使用 fwrite
:
if (n && fwrite(str, 1, n, stdout) != n) {
/* Error handling. */
}
不,不直接。
你可以做的就是把它放在一个循环中
#include <stdio.h>
int main(void) {
char test[] = "one[=10=]two[=10=]three[=10=]four[=10=]"; /* double NUL to terminate data */
char *ptr = test;
do {
ptr += printf("%s\n", ptr); /* add string size + 1 (extra 1 from '\n') */
} while (*ptr);
return 0;
}
如果您知道要显示的空终止字符串的数量:
size_t str_count; // Count of '[=10=]' in my_str
const char * my_str; // Points on contiguous Null terminated strings
for(size_t i=0; i<str_count; i++)
{
printf("%s", my_str);
my_str += 1 + strlen(my_str); // "+1" to skip the `[=10=]`
}
您可以使用 putchar
:
char *buffer = "1234[=10=]ABCD[=10=]hello";
char *s = buffer;
int n = 6;
while (n--)
putchar(*s++);