Во-первых, предупреждение, которое вы получаете, может рассматриваться как ошибка. Любой подчиненный вызов новой функции неизбежно перезаписывает память, в которой хранилась информация, которую вы намеревались вернуть. При этом есть несколько способов обойти эту проблему.
Клиентская собственность
Можно было бы, как предложил Moo-Juice, добавить некоторые параметры к вашему вызову, делегируя ответственность за постоянство информации после вызова функции.
void returnFullPath(char* fullPath, int maxLength)
и прежде чем вы закончите, скопируйте свой результат в выходной параметр с вызовом strncpy (http://www.cplusplus.com/reference/cstring/strncpy/).
strncpy(fullPath, bidbotPath, maxLength);
Таким образом, вы убедитесь, что вызывающая функция является владельцем памяти, выделяя и удаляя ее. И что вы не будете пытаться использовать нераспределенную память.
Право собственности со стороны поставщика
Существует, однако, другой подход, также принятый для этого языка. И это тот, который используется, например, библиотекой stdio.h. Если вы хотите открыть файл, вы используете структуру FILE в качестве указателя. В этом случае stdio предоставляет нам как функции fopen, так и fclose, одну, которая распределяет ресурсы, и другую, которая их распределяет. Это использует концепцию, называемую абстрактный тип данных, которая ближе всего подходит к объекту, который мы когда-либо увидим в структурированном программировании. См. this для получения дополнительной информации о ADT. В этом случае полная ADT кажется абсурдным излишним для того, что вы делаете, но идет с идеей.
Для этого случая потребуются как функции, так и распределение и перераспределение.
char* getFullPath(); /* here is where you do malloc*/
void disposeFullPath(char* fullPath); /* and here, free */
Таким образом, вы можете распределить точное количество необходимой памяти
По поводу вашего вопроса я хотел бы сделать несколько комментариев.
- Всякий раз, когда вы можете, старайтесь придерживаться стандарта ANSI. Это - это Википедия, но кажется точным.
- Теперь, когда вы используете C, вы должны проверить правила стиля для языка. Проверьте это .
- Используйте strrchar, чтобы найти последний символ '/' на пути: здесь вы идете
- И последнее, но не менее важное: избегайте статических глобальных переменных, это не что иное, как головная боль