Как распечатать область памяти фиксированной длины, которая содержит несколько \ 0? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть область памяти с фиксированной длиной.

char *p = malloc(100);
memset(p, 0 ,100);

У меня есть несколько строк в этой области памяти, наряду с некоторыми \ 0, например

memcpy(p, "asdf", 4);
memcpy(p + 10, "ghi", 3);
memcpy(p + 20, "1234", 3);

Итак, есть\ 0 между asdf и ghi

Я хочу напечатать эту память, и вывод будет

asdfghi1234

Как я могу это сделать?Обратите внимание, что приведенный выше код является лишь примером, где эти \ 0 не исправлены.

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Предполагая, что вы знаете размер блока памяти (здесь жестко задано значение 100):

for (int i = 0; i < 100; i++)
{
    char c = p[i];
    if (c != 0)
        printf("%c", c);
}

Незначительно, но в приведенном выше примере строка будет "asdfghi123", потому что memcpy для "1234" копирует только 3 байта.

1 голос
/ 29 мая 2019

Поскольку байты NUL не портят внешний вид текста (я думаю), и это все, что вы ищете, вы должны быть в состоянии записать все байты непосредственно в стандартный вывод:

fwrite(p, sizeof(char), 100, stdout);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...