在我的项目中,我有一个文件作为输入,我需要输出文件和一个新的扩展名。假设我的输入文件是file.txt
,这里是name
。我需要输出文件file.dic
。我尝试了以下。使用不同的扩展名创建新文件
fpout = fopen(strcat(name,".dic"), WRITE_ONLY);
我知道这不是正确的方法。但是,我应该怎么做才能得到file.dic
的文件名?
在我的项目中,我有一个文件作为输入,我需要输出文件和一个新的扩展名。假设我的输入文件是file.txt
,这里是name
。我需要输出文件file.dic
。我尝试了以下。使用不同的扩展名创建新文件
fpout = fopen(strcat(name,".dic"), WRITE_ONLY);
我知道这不是正确的方法。但是,我应该怎么做才能得到file.dic
的文件名?
如果你只是想改变文件扩展名,这是一个简单的方法来做到这一点。
int lenght;
lenght = strlen(name);
name[lenght - 1] = c;
name[lenght - 2] = i;
name[lenght - 3] = d;
name[lenght - 4] = .;
你也可以使用while
,虽然你不检查'。'增加i,然后以相同的方式更改扩展名。
或
strncpy (strstr (name,"txt"),"dic",3);
这可能不起作用有两个原因。首先,名称可以在OP代码的只读部分中(当声明为即时)时。其次,你的代码将从C字符串中删除终止的零,这通常是致命的。 – usr2564301
它不会删除终止零。斯特伦不给我长+ 1我认为,不是? – Gabson
数组索引从0开始。在C和C++中,访问'array [sizeOfArray]'超出限制。如果是字符串'string [lengthOfString]'则指向终止符。如果输入文件名突然有不同的扩展名,或者根本没有扩展名,代码也可能会产生未解决的结果。 – Peter
char * newstr;
newstr = strstr (name,"txt");// name = "file.txt"
strncpy (newstr,"dic",3);
//newstr = file.dic
这将取代file.txt
与file.dic
你的括号是不平衡的。 – Potatoswatter
“显然”,你必须用'dic'替换'txt'。这只是标准的字符串,所以有什么问题? – usr2564301
当把''file.txt''与'“.dic”'连接起来时,你会期望什么? –