Консультация № 174139
11.11.2009, 19:16
0.00 руб.
0 4 2
Помогите пожалуйста написать прогу.Вывести на экран имя выполняющейся программы (без указания полного пути).

Обсуждение

Неизвестный
11.11.2009, 20:17
общий
это ответ
Здравствуйте, vplusv.
Программа. MS VC++.
Один из способов
Код:
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

string getFileName(const char* const path)
{
char name[_MAX_FNAME];
char ext[_MAX_EXT];
#pragma warning(disable:4996)
_splitpath(path,0,0,name,ext);
return string(name)+string(ext);
}

int main(int argc,char** argv)
{
cout<<getFileName(argv[0])<<endl;

system("PAUSE");
return 0;
}


То же самое на C:
Код:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

size_t getFileName(const char* const path,char* fileName)
{
char name[_MAX_FNAME]={0};
char ext[_MAX_EXT]={0};
size_t len;
#pragma warning(disable:4996)
_splitpath(path,0,0,name,ext);
len=strlen(name)+strlen(ext);
if(fileName)
{
strcpy(fileName,name);
strcat(fileName,ext);
}
return len;
}

int main(int argc,char** argv)
{
size_t len=getFileName(argv[0],0);
char* name=(char*)malloc(len+1);
getFileName(argv[0],name);
printf("%s\n",name);
free(name);

system("PAUSE");
return 0;
}
давно
Старший Модератор
17042
808
12.11.2009, 04:34
общий
vplusv:
Решение эксперта Micren приведено для ОС Windows. Вам это нужно? На будущее указывайте целевую ОС для Вашей программы.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
12.11.2009, 04:49
общий
vplusv:
По Вашей просьбе добавил на C. Я так понял, что Вам нужно именно на C, а не C++.
Неизвестный
12.11.2009, 10:24
общий
это ответ
Здравствуйте, vplusv.
Относительно универсальный вариант (C99)


Приложение:
#include <stdio.h>
#include <string.h>
int main(int argc,char ** argv)
{
char *last_slash=strrchr(argv[0],'/');/*Ищем последнее вхождение символа '/' - отбрасываем путь*/
if(last_slash != NULL)
{
printf("%s\n",++last_slash);/*если нашли, то выводим начиная со следующего символа*/
}else{
printf("%s\n",argv[0]);/*не нашли, значит текущий каталог в PATH и вызвана по имени - выводим имя*/
};
};
Форма ответа