我想先说我很少用 C 语言进行编程,所以我更愿意知道为什么给定的解决方案有效,而不仅仅是它是什么。
我正在尝试编写一个函数,该函数将采用路径名,并将路径名返回到同一目录中的不同文件。
"/example/directory/with/image.png" => "/example/directory/with/thumbnail.png"
在阅读了realpath
and的示例用法dirname
(我正在使用 Linux;如果有跨平台的等价物,请告诉我)之后,我尝试过的是:
#include <limits.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char *chop_path(char *orig) {
char buf[PATH_MAX + 1];
char *res, *dname, *thumb;
res = realpath(orig, buf);
if (res) {
dname = dirname(res);
thumb = strcat(dname, "/thumbnail.png");
return thumb;
}
return 0;
}
编译它似乎工作,但运行程序
int main(void) {
char *res = chop_path("original.png");
if (res) {
printf("Resulting pathname: %s", res);
}
return 0;
}
给我一个段错误。有什么提示吗?