windows系统上没有basename这个小工具,就写了一个。
#include <stdio.h>
#include <string.h>
//c语言缺少的宏定义
#define bool int
#define false 0
#define true 1
char g_basename[1024] = {0};
void set_basename(char *name){
bool hasSeparator = false;
unsigned int separatorPos = 0;
int i=0;
for(i=0;i<strlen(name);i++){
if(name[i]=='\\'||name[i]=='/'){
separatorPos = i;
hasSeparator = true;
}
}
if(hasSeparator == true){
strcpy(g_basename,name+separatorPos+1);
}else{
strcpy(g_basename,name);
}
}
int main(int argc, char* argv[]){
if(argc == 1){
printf("none");
}else{
set_basename(argv[1]);
printf("%s",g_basename);
}
return 0;
}不带扩展名的函数
//获取文件名
void get_basename(char *fullname,char basename[]){
bool hasSeparator = false;
unsigned int separatorPos = 0;
int i=0;
for(i=0;i<strlen(fullname);i++){
if(fullname[i]=='\\'||fullname[i]=='/'){
separatorPos = i;
hasSeparator = true;
}
}
if(hasSeparator == true){
strcpy(basename,fullname+separatorPos+1);
}else{
strcpy(basename,fullname);
}
}
// 不带扩展名
void get_basename_no_ext(char *fullname,char basename[]){
get_basename(fullname,basename);
unsigned int pointpos = 0;
bool haspoint = false;
for(int i=0;i<strlen(basename);i++){
if(basename[i]=='.'){
haspoint = true;
pointpos = i;
}
}
if(haspoint){
basename[pointpos] = '\0';
}
}