不要在null终止时停止printf(\ 0)

时间:2015-03-13 09:45:48

标签: c printf

printf在第一个\ 0遇到停止打印。

有没有办法强制它继续,例如,如果我的字符串在\ 0之后包含更多字符。

4 个答案:

答案 0 :(得分:6)

如果您知道字符串的长度为n个字符,则可以使用fwrite输出:

if (n && fwrite(str, 1, n, stdout) != n) {
    /* Error handling. */
}

答案 1 :(得分:3)

不,不是直接。

你能做的就是把它放在循环中

#include <stdio.h>

int main(void) {
    char test[] = "one\0two\0three\0four\0"; /* 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;
}

答案 2 :(得分:1)

您可以使用putchar

char *buffer = "1234\0ABCD\0hello";
char *s = buffer;
int n = 6;

while (n--)
    putchar(*s++);

答案 3 :(得分:0)

如果您知道要显示的空终止字符串的计数:

size_t str_count; // Count of '\0' 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 `\0`
}