моя часть кода делает проверку на путь ,который указывают для файла. В этом пути должны быть исключены все зарезервированные имена Windows ( из серии con,clock$ и т.п. ) , в целом я был уверен, что написал правильную функцию, но после запуска стало выдавать ошибку "string subscript out of range" . Подскажите , пожалуйста, в чём моя ошибка.
bool CheckFile(string path) {
int retry = 0, numbers, point = 0, miniNameSize = 0, numberPoints;
int sizePath = size(path);
for (numberPoints = sizePath; numberPoints >= 0; numberPoints--) {
if (path[numberPoints] == '.') {
point = numberPoints;
break;
}
for (int k = 0; k < sizePath; k++) {
if (path[k] == '.' && k != point ) {
path.erase(k, 1);
k--;
}
sizePath = size(path);
}
for (int k = 0; k < sizePath; k++) {
if (path[k] == ' ') {
path.erase(k, 1);
k--;
}
}
sizePath = size(path);
for (numbers = 0; numbers < sizePath; ) {
if ((path[numbers] == '\\' || path[numbers] == '/') || numbers == 0) {
for (int n = 1; (path[numbers + n] != '\\' || path[numbers + n] != '/' || path[numbers + n] != '.'); n++) miniNameSize = n;
// Работаем с именем
if (miniNameSize == 0) numbers++;
else {
if (numbers == 0) numbers--;
for (int j = numbers + 1 ; j <= miniNameSize; ) { // Аккуратно с j !!!!
if (miniNameSize - j < 3) break;
else {
if (j + 3 == miniNameSize + 1) {
if ((path[j] == 'n' || path[j] == 'N') && (path[j + 1] == 'u' || path[j + 1] == 'U') && (path[j + 2] == 'l' || path[j + 2] == 'L')) retry++;
if ((path[j] == 'c' || path[j] == 'C') && (path[j + 1] == 'o' || path[j + 1] == 'O') && (path[j + 2] == 'n' || path[j + 2] == 'N')) retry++;
if ((path[j] == 'p' || path[j] == 'P') && (path[j + 1] == 'r' || path[j + 1] == 'R') && (path[j + 2] == 'n' || path[j + 2] == 'N')) retry++;
if ((path[j] == 'a' || path[j] == 'A') && (path[j + 1] == 'u' || path[j + 1] == 'U') && (path[j + 2] == 'x' || path[j + 2] == 'X')) retry++;
}
if (j + 4 == miniNameSize + 1) {
if ((path[j] == 'c' || path[j] == 'C') && (path[j + 1] == 'o' || path[j + 1] == 'O') && (path[j + 2] == 'm' || path[j + 2] == 'M') && (path[j+ 3] == '1' || path[j + 3] == '2' || path[j + 3] == '3' || path[j + 3] == '4')) retry++;
if ((path[j] == 'l' || path[j] == 'L') && (path[j + 1] == 'p' || path[j + 1] == 'P') && (path[j + 2] == 't' || path[j + 2] == 'T') && (path[j + 3] == '1' || path[j + 3] == '2' || path[j + 3] == '3')) retry++;
}
if (j + 6 == miniNameSize + 1) {
if ((path[j] == 'c' || path[j] == 'C') && (path[j + 1] == 'l' || path[j + 1] == 'L') && (path[j+ 2] == 'o' || path[j + 2] == 'O') && (path[j + 3] == 'c' || path[j + 3] == 'C') && (path[j + 4] == 'k' || path[j + 4] == 'K') && path[j + 5] == '$') retry++;
}
}
}
}
numbers = numbers + (miniNameSize + 1);
miniNameSize = 0;
}
}
}
for (int n = 1; <оно здесь>- там невооруженным глазом ее видно. Но даже после исправления этого, есть ряд ошибок - во первых там что то зацикливается, а во вторых, не видно возврата результата. Но в целом, сам код вызывает тревожность - алгоритм в нем потерялся – KoVadim Dec 05 '20 at 12:56