私のプログラムでは、 basename 関数を使用してパーティションを取得しています。まず、if 文を次のように書きます。
if (!strncmp(buf,
basename("/dev/mmcblk0p3"),
strlen(basename("/dev/mmcblk0p3"))) {
ret = 1;
} else {
ret = 0;
}
buf は文字列 "mmcblk0p3" を指していますが、ret = 0 で、gdb を使用すると、basename("/dev/mmcblk0p3") が奇妙な文字列を返すことがわかりましたが、プログラムを次のように変更したとき:
char *p = NULL;
p = basename("/dev/mmcblk0p3");
if (!strncmp(buf, p, strlen(p)) {
ret = 1;
} else {
ret = 0;
}
ret が 1 の場合、プログラムは正常に実行されます。違いはなんですか?basename はこのように使用できませんか? コンパイル環境はarmel7v/gccです。