Как я могу получить доступ к массиву char внутри std :: string? - PullRequest
3 голосов
/ 29 марта 2020

Мне было дано задание написать файловую систему в Linux, которая имитирует устройство хранения в виде файла.

Одна из функций, которые мне дали, должна считывать данные внутри "файла". Для этого у меня есть функция, которая должна возвращать std::string.

Как я могу прочитать данные из файла с помощью следующей функции непосредственно в std::string?

void read(int addr, int size, char *ans)

Есть ли способ передать массив char внутри std::string как параметр этой функции? Все методы и функции-члены, с которыми я сталкивался до сих пор, возвращают только const char*, который в этом случае не работает.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 29 марта 2020

Обычный способ сделать это - передать указатель на первый символ строки. Это гарантированно работает, потому что стандарт гарантирует, что символы внутри std::basic_string хранятся непрерывно ( [basi c .string] / 2 ).

Таким образом,

read(addr, str.size(), & str[0]);

работает, , но только если вы ранее изменили размер строки до ненулевого размера . Кроме того, ваша функция read не сообщает вам , сколько символов было прочитано. В вашем IO API должна быть некоторая функциональность, чтобы сказать вам это.

0 голосов
/ 29 марта 2020

На самом деле, это плохая идея, так как тогда класс std::string не знает, сколько символов было вставлено. Гораздо лучше создать локальный буфер std::array<char, 256> buf, передать его функции, а затем поместить в std::string, используя std::string(buf.data, buf.size()).

...