2012-04-26 4 views
4

Извините за вопрос noobish, но я не могу заставить его работать, любая помощь будет оценена.Использование массива символов в качестве имени файла?

const int sz = 24; 


int main() 
{ 
char a [sz]; 

for (int i = 0; i < 5; i++) 
    cin >> a[i]; 

ifstream inFile; 

inFile.open(a); 

cout << inFile.good() << endl; 


return 0; 
} 

Это уменьшенная версия того, что я пытаюсь сделать, и который открыт поток входной_файл с .Open() и для имени файла Я стараюсь передать, что массив символов. У меня есть файл с именем a.txt в правом каталоге (я это подтвердил), поэтому я ввожу файл a.txt, который считывается в массив, но inFile.good() по-прежнему возвращает false. Я также знаю, что массив больше 5 символов, но я не думаю, что это должно повлиять на него.

Если вам нужна дополнительная информация, дайте мне знать.

+0

Нужно аннулировать строку c. 'a [5] = NULL;' – philipvr

+0

Является ли a.txt в том же каталоге, что и программа C? – cppcoder

+0

У вас есть нулевой конец массива, чтобы вы могли использовать его в виде строки? – John3136

ответ

2

Подпись open является:

void open (const char * filename, ios_base:openmode mode = ios_base::in); 

как видно кулака аргумента является постоянной строкой (завершенным нуль массива символов). В вашем случае в конце нет нулевого символа. Для этого вам понадобится массив размером больше, чем максимальный размер имени файла, который вы будете вводить.

Почему бы не прочитать символ, используя только один cin? Как:

cin >> a; 
ifstream inFile; 
inFile.open(a); 

Или еще лучше использовать String класс, чтобы получить пользовательский ввод, а затем использовать c_str(), чтобы получить const char* эквивалент, который может быть передан open.

+0

Я не знал, что вы можете использовать cin для прямого чтения вещей в виде массива, спасибо за это – DanielAden

+0

@coaddict - для классов ifstream и ofstream ios :: in и ios :: out автоматически и соответственно предполагается, даже если режим который не включает их, передается как второй аргумент функции-члена open(). – cppcoder

Смежные вопросы