Это строго для языка программирования c.заменить последнее слово в строке c
Я решил эту проблему некоторое время назад, но из-за потери данных мне пришлось переписать код.
Я использую cmake для создания программы, он использует относительные пути, которые определяются во время выполнения, чтобы получить текущий каталог bin.
, когда я получаю место бин во время выполнения обычно возвращает что-то вроде этого:
/Users/username/FOLDER/project/build/bin/Debug/
/Users/username/Library/Caches/cmake/gen/ad053ed7/Debug/bin/
/Users/username/FOLDER/project/build/bin/
Как вы можете видеть, что эти названия все довольно похожи, но немного отличается. Файлы, которые я хотел бы получить доступ к будет располагаться на удалении строки после второго до последнего завершающего слэша и заменить его с именем папки:
/Users/username/FOLDER/project/build/bin/folderName/
/Users/username/Library/Caches/cmake/gen/ad053ed7/Debug/folderName/
/Users/username/FOLDER/project/build/folderName/
Прямо сейчас я просто, имеющим самое трудное время получения этого снова разобрался.
Как я могу сделать что-то подобное в C, которое будет работать через эти и будущие возможные местоположения?
редактировать
char *base_path = getBasePath(); //returns a string to current executable dir
// Е ("% s \ п", базовый_путь);
size_t len = strlen(base_path);
char* tmp = (char*)malloc(sizeof(char) * (len * 2)); //malloc a large chunk of space just for now
memcpy(tmp, base_path, len);
tmp[len-1] = '\0';
//printf("tmp:\t%s\n",tmp);
const char sep = '/'; //possible separator conflicts on other platforms
size_t max = 0;
size_t slen = 0;
for(size_t i = 0; i < len; i++)
{
if(tmp[i] == sep)
{
max = i;
//printf("%c",tmp[i]);
}
if(tmp[i] == '\0')
{
slen = i;
printf("len is:%zu\n",i);
}
}
//printf("%c, %zu\n",tmp[max], max);
memcpy(tmp + max, "/resources/", 11);
tmp[slen + 7] = '\0';
const size_t flen = slen + 7;
realloc(tmp, slen+7);
printf("tmp:\t%s\n",tmp);
res_dir = (char*)malloc(sizeof(char) * flen); //res dir is static char*
memcpy(res_dir, tmp, flen);
res_dir[flen] = '\0';
// printf ("res dir: \ t% s \ n", res_dir);
free(base_path);
возможно ['strrchr()'] (http://linux.die.net/man/3/strrchr) поможет? –
Показать код, который не работает. –
Функция strtok будет полезна также – Sarwan