Это мой первый вопрос, поэтому я извиняюсь, если это не полезный вопрос.Почему мой код ведет себя так?
У меня есть проект симулятора, где пользователь вызывает программу через командную строку с некоторыми параметрами. Нравится, MYPROG [options] filename
.
Мне нужно убедиться, что имя файла действительно, где оно (каталог) и получить имя для дальнейшего использования.
Вот часть кода:
char* ExtrairNome(char* alvo){
char* teste = alvo;
char* nome = NULL;
int barras = 0;
while(strcmp(teste, "") != 0){ //look for "/"
if (teste[0] == '/') barras++;
teste++;
}
teste = alvo;
if (barras > 0){
while(barras > 0){ //remove everything leaving the "filename.ias"
if (teste[0] == '/') barras--;
teste++;
}
}
int i = 0;
char aux[strlen(teste) - 4];
while (strcmp(teste, ".ias")){ //remove the ".ias"
aux[i] = teste[0];
teste++;
i++;
}
printf("random %d\n", barras); //this line fixes the bug!!
aux[i] = '\0';
nome = aux;
return nome;
}
Эта функция принимает строку с полным именем файла и должен возвращать только имя, без пути или расширением. Но он работает только тогда, когда я печатаю некоторую переменную перед возвратом. Если я удалю эту строку, функция ничего не вернет. Я думаю, что это имеет какое-то отношение к сфере видимости, но я точно не знаю. Как я могу это исправить?
Вы фактически возвращает локальную переменную по указателю. Это приведет к неопределенному поведению. Заставьте функцию принимать выделенный вызывающим вызовом буфер и записать вместо этого. – LumpN
Для проверки пустой строки просто 'while (teste [0])' достаточно, не нужно вызывать 'strcmp (teste," ")! = 0', который намного медленнее –