2013-11-21 150 views
-1

我试图分析在C像这样的字符串:查找路径父文件夹

/afolder/secondfolder/thirdone 

做一个函数和函数应该返回此:

/afolder/secondfolder 

我tryed很多东西...

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

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

    strncpy(TargetDirectory, pPathNewLink, dirPath - pPathNewLink); 

    return 1; 
} 

我不能使用操作系统库。我必须这样做。

我tryed调用这样的功能:

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

但我得到一个赛格故障...

+0

您的代码适用于我。它完全符合你的说法。显示调用这个函数的代码,它可以调用它错误的。 – JIghtuse

+0

@角色我可以这样的功能:\t \t char * targetFolder; getParentFolder(pDirName,targetFolder); – Lorac

+0

您是否为TargetDirectory分配内存? – starrify

回答

1

我想,其原因是,你有没有为test分配内存。
由于您正在尝试strncpyTargetDirectory,因此必须对其进行初始化并具有一个内存区域。

尝试:

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

然后做你喜欢的事情:

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

另外,如果你选择了一个malloc,不要忘记在使用后释放它:

free(test); 

编辑:

还有另一个问题,对不起,最初没有看到它。
要复制您使用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

你必须使用这个。或者你必须将“test”定义为char“test [256]”。即使现在你得到一个SegFault,那么一定有其他东西导致它。 – Abhineet

+0

@Lorac是的,还有别的东西。请看我编辑的答案。 – starrify