-1

我正在尝试在 c 中解析一个字符串,如下所示:

/afolder/secondfolder/thirdone

做一个函数,那个函数应该返回这个:

/afolder/secondfolder

我尝试了很多东西...

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

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

    strncpy(TargetDirectory, pPathNewLink, dirPath - pPathNewLink);

    return 1;
}

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

我尝试像这样调用函数:

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

但我得到一个段错误......

4

1 回答 1

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;
}

如果还有任何问题,请告诉我。

于 2013-11-21T05:17:22.750 回答