Мне было поручено внести простые изменения в приложение C ++.К сожалению, я пришел из Java-фона и столкнулся с некоторыми проблемами с указателями.
Код, о котором идет речь, читает список файлов из данного каталога (устанавливается с помощью переменной среды) и выполняетчто-то в каждом файле.
char * rebuildDir = getenv("REBUILD_DIR");
char * currentFile;
DIR *asciiDir;
struct dirent *ent;
asciiDir = opendir(rebuildDir);
if (asciiDir != NULL)
{
while ((ent = readdir(asciiDir)) != NULL)
{
std::cout << "rebuild sensor, rebuild dir is " << getenv("REBUILD_DIR") << std::endl;
currentFile = rebuildDir;
strcat(currentFile, ent->d_name);
ifstream raw(currentFile);
while(raw)
{
...snip...
}
raw.close();
}
closedir(asciiDir);
}
Как видите, цель состоит в том, чтобы один раз сохранить переменную среды, затем скопировать ее в currentFile, а затем объединить текущее имя файла в currentFile, готовый для передачи в ifstream.
Проблема в том, что
currentFile = rebuildDir;
не сбрасывается в переменную среды, поэтому strcat продолжает использовать старое имя файла и добавлять к нему, поэтому:
/home/file1
/home/file2
/home/file3
будет выполняться как
/home/file1
/home/file1/home/file2
/home/file1/home/file2/home/file3
через цикл.Я предполагаю, что я делаю элементарную ошибку с моими указателями, но я не смог отследить ее.
Спасибо за любую помощь и извиняюсь за тривиальный вопрос.
PS - если есть явно лучший подход для выполнения моей задачи, пожалуйста, не стесняйтесь указывать на это:)