2013-11-21 8 views
-1

Я пытаюсь разобрать строку в С чем-то вроде этого:Найти путь к родительской папке

/afolder/secondfolder/thirdone 

сделать функцию и эта функция должна возвращать это:

/afolder/secondfolder 

Я судимый многие вещи ...

int getParentFolder(const char *pPathNewLink, char* TargetDirectory) { 

    char *dirPath = strrchr(pPathNewLink, '/'); 

    strncpy(TargetDirectory, pPathNewLink, dirPath - pPathNewLink); 

    return 1; 
} 

Я не могу использовать библиотеки операционных систем. Я должен сделать это именно так.

I судимого вызова функции вроде этого:

char * test; 
getParentFolder("/var/lib",test); 
printf("%s", test); 

, но я получаю ошибку сегм ...

+0

Ваш код работает для меня. Он делает то, что вы говорите. Покажите код, вызывающий эту функцию, он может назвать это неправильным. – JIghtuse

+0

@JIghtuse Я могу выполнять следующие функции: \t \t char * targetFolder; getParentFolder (pDirName, targetFolder); – Lorac

+0

Вы выделили память для TargetDirectory? – starrify

ответ

1

Я полагаю, причина в том, что вы не выделять память для test.
Поскольку вы пытаетесь установить strncpy на номер TargetDirectory, он должен быть инициализирован и иметь область памяти.

Try:

char *test = malloc(256); 
/* or this */ 
char test[256]; 

Затем сделать ваши вещи, как:

GetDirFromPath("/var/lib",test); 
printf("%s", test); 

Кроме того, если вы выбираете malloc один, не забудьте освободить его после использования:

free(test); 

EDITED:

Также есть еще одна проблема, извините, потому что не видел ее сначала.
Чтобы скопировать первую часть строки, которую вы используете strncpy, однако вам все равно нужно заполнить окончание '\0' строки вроде этого:

int getParentFolder(const char *pPathNewLink, char* TargetDirectory) { 
    char *dirPath = strrchr(pPathNewLink, '/'); 
    strncpy(TargetDirectory, pPathNewLink, dirPath - pPathNewLink); 
    TargetDirectory[dirPath - pPathNewLink] = 0; // please make sure there is enough space in TargetDirectory 
    return 1; 
} 

Пожалуйста, дайте мне знать, если есть еще какие-либо проблемы.

+0

Пробовал, не работал, все еще получая ошибку seg. – Lorac

+0

Вы должны использовать это. Или вы должны определить «тест» как char «test [256]». Даже если теперь вы получаете SegFault, тогда должно быть что-то другое, вызывающее его. – Abhineet

+0

@Lorac Да там _is_ что-то еще. См. Мой отредактированный ответ. – starrify

Смежные вопросы