#cpp
Почему этот код падает с Segmentation fault? #include#include void func(std::ifstream &f, std::string &key_len_str) { char *c; f.read(c, 1); key_len_str += (std::string) c; } int main() { std::ifstream f("f.txt", std::ios_base::binary); std::string s = ""; func(f, s); func(f, s); func(f, s); std::cout << s << std::endl; }
Ответы
Ответ 1
Рекомендую вам полностью переписать код. Так как вы получаете только 1 символ, было бы логичнее использовать функцию get. Вы передаёте строку key_len_str с типом string, который является контейнером, состоящим из элементов char, в него можно положить объект типа char с помощью метода push_back. Я исправил ваш код с учётом рекомендаций: #include#include #include void func(std::ifstream &f, std::string &key_len_str) { char c; f.get(c); key_len_str.push_back(c); } int main() { std::ifstream f("f.txt", std::ios_base::binary); std::string s = ""; func(f, s); func(f, s); func(f, s); std::cout << s << std::endl; } Ответ 2
бага здесь char *c; f.read(c, 1); Вы создаете указатель на переменную типа char, но память не выделяете. Как исправить. Хороший вариант char c; f.read(&c, 1); Похуже, сильно похуже (вариант не рекомендуется к употреблению в реальных программах, кроме случая, если это нужно для обезумевшего преподавателя). char * c = new char; f.read(&c,1); delete c;
Комментариев нет:
Отправить комментарий