srilekhamenon Ответов: 1

Печать нулем массив символов, завершающийся в C


iam получает строку от драйвера в следующем формате
\ U s e r s \ a b c \ A p p D a t a\
в массиве char и я хочу получить вывод типа
\Users\abc\AppData\ без цикла
неужели это возможно ?

Что я уже пробовал:

fwrite(notification->FileName, sizeof(char), 50, stdout);

Richard MacCutchan

printf("%S\n", notification->FileName);
Верхний регистр S предполагает, что данные являются Юникодом.

srilekhamenon

я получаю этот вывод
Предупреждение C4477 'е' : строка формата "%s " не требует аргумент типа 'беззнаковый short *', но аргумент имеет тип вариативную 1 'Учар *'

1 Ответов

Рейтинг:
12

OriginalGriff

Если данные находятся в том виде, который вы показываете, где каждый символ из драйвера разделен пробелами, то нет, вы не можете удалить или игнорировать их без цикла некоторых из них.

Но... являются ли они нулевыми или драйвер передает вам 16-битные символы Юникода, а вы предполагаете 7 или 8-битный ASCII? Потому что если это так - и я бы сказал, что это кажется вероятным, - то обработка данных, которые вы получаете правильно, как Unicode, была бы гораздо лучшим решением. Я бы начал с того, что посмотрел на детали драйвера и увидел, что именно он говорит, что дает вам - современный комплект ожидает Unicode в той или иной форме, так что вполне вероятно, что вы просто неправильно относитесь к нему.


srilekhamenon

Да сэр эти пробелы являются нулевыми символами

OriginalGriff

Тогда есть вероятность, что это 16 - битные данные Unicode-поэтому проверьте документы драйвера, а затем посмотрите, поддерживает ли ваш компилятор C Unicode. Кто - то хочет, кто-то нет- Си очень древний язык!

srilekhamenon

спасибо сэр я решил свою проблему с помощью функции преобразования WideCharToMultiByte