c - 编辑字符串时出现段错误?

标签 c char file-extension

我必须在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/

相关文章:

c - 转换时出现未知错误 [C]

c - 尝试在 c 中返回 char* 时出错

regex - 寻找一种将许多文件扩展名搜索到文件名字符串中的优雅方法

vim - 在 Vim 上的不同文件扩展名上自动启用和禁用自动换行

c - C 中 Union Struct 的动态数据结构

c - 如何捕获数据包(NPF; WinPcap)?

c - 在 ubuntu 上使用 execve 启动 Gtk 程序时出现 "Gtk-WARNING **: cannot open display: "

c - 在 Cygwin 或 MinGW 中将 CMake 与 AVR 工具链结合使用

c - 使用 char 和 scanf 时输入值无效 "%hhu"

html - html 片段的文件扩展名