您的代码中有两个问题 1)您正在使用 char * 正在尝试修改代码中的受保护内存
2)您试图从您的函数返回一个本地地址,这也不好。
3) 如果文件名包含点“。”怎么办?在其文件名中。
您可以使用 char 数组作为解决方案,但仍然存在第二个问题,因为您应该分配一些内存,然后将返回的字符串复制到该内存中
char* swapExtension(char * fileName, char * fileExtension)
{
int newext = strlen(fileExtension);
bool flag =false;
int size = strlen(fileName);
int ext = 0;
for(int i=size-1;i>=0;i--)
{
if(fileName[i] == '.')
{
flag = true;
ext = (size -1) - i;
break;
}
}
if(!flag){
printf("no extension found");
return NULL;
}
int retsize = size - ext + newext + 1;
char * retBuff = new char[retsize];
retBuff[0]='\0';
memcpy(retBuff,fileName,retsize);
strncpy(&retBuff[size-ext], fileExtension, newext);
return retBuff;
}