我必须在C中创建一个可以将文件扩展名交换为另一个的函数。例如:
swapExtension("myFile.c", "o");
原型(prototype)是:
char * swapExtension(char * fileName, char * fileExtension).
除了段错误之外我什么也没得到。我的代码是:
{
char * temp = strchr(fileName, '.');
printf("%s",temp);
strncpy(temp, nouvelleExtension, 2);
}
最佳答案
您的代码中有两个问题 1)您正在使用 char * 试图修改代码中 protected 内存
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;
}
关于c - 编辑字符串时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19517929/