私は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;
}
セグメンテーション違反が発生します。ヒントはありますか?