Часть большой программы, которую я создаю, требует, чтобы путь был прочитан из командной строки и сохранен в классе. Поскольку пути могут быть произвольного размера и необходимы в нескольких функциях, я сохраняю их в char*
в заголовочном файле. Но по какой-то причине, когда я присваиваю ему значение, программа segfaults.
Отладчик (gdb) показывает следующее:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b4828a in std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*) ()
from /usr/lib/libstdc++.so.6
Вот программа, которую я написал, чтобы продемонстрировать проблему:
test.cpp:
#include "test.h"
#include <iostream>
#include <cstring>
Test::Test() {
filepath = NULL;
}
void Test::set_path(char* string) {
char temp[strlen(string) + 1];
strcpy(filepath, temp);
}
char * Test::get_path() {
return filepath;
}
int main(int argc, char *argv[]) {
std::cout << "Enter a file path: ";
char *temp;
std::cin >> temp;
Test *temp2 = new Test();
temp2->set_path(temp);
std::cout << "Path: " << temp2->get_path() << std::endl;
}
test.h:
#ifndef TEST_H
#define TEST_H
class Test {
private:
char *filepath;
public:
Test();
void set_path(char *);
char * get_path();
};
#endif // TEST_H
Я не уверен, почему он падает. Что-то не так с методом, которым я занимаюсь? Кроме того, вместо того, чтобы просто переключиться на string
s, я хотел бы узнать больше об этой проблеме.
Заранее спасибо!