Название программы в argv [0] - PullRequest
1 голос
/ 23 апреля 2011

Я прочитал, что argv[0] содержит имя программы, то есть имя, под которым мы сохраняем проект .... но когда я выполняю следующую инструкцию в моей целевой программе на языке C, программа

const char *proName=argv[0];

iсм. в консоли следующее:

/Users/apple/Library/Developer/Xcode/DerivedData/testaehcfzilirskhjbifrwresgppvbp/Build/Products/Debug/test

здесь test - это имя моей программы .... так что же он дает ... полный путь или имя программы?Спасибо

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

Как вы заметили, argv[0] может (но не всегда) содержать полный путь вашего исполняемого файла.Если вам нужно только имя файла, одно из решений:

#include <libgen.h>

const char *proName = basename(argv[0]);

Как заметил Мэт, argv[0] не всегда надежен - хотя обычно так и должно быть.Это зависит от того, что именно вы пытаетесь выполнить.

Тем не менее, есть альтернативный способ получения имени исполняемого файла в Mac OS X:

#include <mach-o/dyld.h>
#include <libgen.h>

uint32_t bufsize = 0;

// Ask _NSGetExecutablePath() to return the buffer size
// needed to hold the string containing the executable path
_NSGetExecutablePath(NULL, &bufsize);

// Allocate the string buffer and ask _NSGetExecutablePath()
// to fill it with the executable path
char exepath[bufsize];
_NSGetExecutablePath(exepath, &bufsize);

const char *proName = basename(exepath);
2 голосов
/ 23 апреля 2011

Вы не можете зависеть от argv[0], содержащего что-то конкретное. Иногда вы получите полный путь, иногда только имя программы, иногда что-то еще целиком.

Это зависит от того, как был вызван код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...