Этот код должен работать:
#define IMAGE_BACKGROUND "\\content\\images\\background.bmp"
int main(int argc, char* args[])
{
char buf[512];
int endOfPath = strrchr(args[0], '\\') - args[0];
strncpy_s(buf, sizeof(buf), args[0], endOfPath);
strcat(buf, IMAGE_BACKGROUND);
Как сказал другой человек, args [0] - это полный путь исполняемого файла, поэтому вы не можете использовать его как есть. Функция strrchr (два в середине) находит последнее вхождение данного символа и возвращает указатель на него. Предполагая, что вы используете однобайтовые символы, вычитая args [0] из возвращенного указателя, вы получите количество символов между двумя указателями. Когда вы вычитаете два указателя, вы фактически вычитаете адреса памяти, так что вы слева - смещение или расстояние между указателями. Это расстояние похоже на индекс найденного символа.
Затем я использую функцию strncpy_s, чтобы скопировать число символов endOfPath из args [0] во временный буфер. Теперь, если путь вашей программы был
"C: \ Windows \ Users \ Me \ Desktop \ myProgram \ theProgram.exe"
переменная buf будет содержать
"C: \ Windows \ Users \ Me \ Desktop \ myProgram"
Затем я использовал функцию strcat (conCATenation), чтобы добавить вашу константу в конец.
Обратите внимание, что с вашим #define ТРЕБУЕТСЯ "\\" в C / C ++, а также обратите внимание, что "метки будут включаться везде, где вы используете IMAGE_BACKGROUND.
После этих строк кода buf будет содержать:
"C: \ Windows \ Users \ Me \ Desktop \ MyProgram \ Содержание \ Images \ background.bmp"
Надеюсь, что это помогает и не слишком смущает ...