0

文字列を連結しようとしていますが、2/3文字列はパスであり、で定義されています#define

例えば:

#define BASE_PATH "foo/bar"
#define BIN_PATH "baz/bin"

事前定義されたパスに直接移動できるようにしたい。ユースケースの例は、そのフォルダーの内容を表示することです。

char path_of_executable[256];
printf ("%s \n",executable);
snprintf(path_of_executable, sizeof 256, "%s,%s,%s",BASE_PATH,executable,BIN_PATH);
printf("%s \n",path_of_executable);
chdir(path_of_executable);
execlp("ls","ls","-l",NULL);

path_of_executable は次のように出力されます/fo

そのパスに移動することはできませんが、代わりに現在のフォルダー内のファイルが印刷されます。何が問題なのですか?

4

3 に答える 3

2

を使用しています。これは、プラットフォームでは明らかに 4 にsizeof 256変換されます。sizeof intそのため、結果の文字列は 4 文字 (null ターミネータを含む) を超えません。sizeof path_of_executable代わりに使用してください。

于 2013-07-09T15:21:26.783 に答える
2

sizeof 256と置き換えますsizeof( path_of_executable )

于 2013-07-09T15:21:29.820 に答える
1

ラインで

snprintf(path_of_executable, sizeof 256, "%s,%s,%s",BASE_PATH,executable,BIN_PATH);

sizeof 256sizeof(path_of_executable)に置き換えます

于 2013-07-09T15:21:50.180 に答える