gpt4 book ai didi

c++ - 更改数组的最后 5 个字符

转载 作者:行者123 更新时间:2023-11-27 23:23:43 25 4
gpt4 key购买 nike

我有一个加密文件的程序,但在末尾添加了扩展名“.safe”。所以最终结果类似于“file.txt.safe”

当我去解密文件时,用户再次输入文件名:“file.txt.safe”,它被保存到一个字符中。现在我想删除“.safe”并将文件重命名为其原始名称。

我尝试了以下方法,但似乎什么也没发生,也没有错误。

Decrypt (myFile); //decrypts myFile

char * tmp = myFile;
char * newFile;
newFile = strstr (tmp,".safe"); //search tmp for ".safe"
strncpy (newFile,"",5); //replace .safe with ""

rename (myFile, newFile);

我确定我遗漏了一些明显的东西,但如果这种方法不起作用,我正在寻找任何简单的方法。

编辑添加:(版主从海报对 K-ballo 的回复中复制)

谢谢大家。我采用了 std::string 方法并发现它有效:

Decrypt(myFile); 
string str = myFile;
size_t pos = str.find(".safe");
str.replace(pos,5,"");
rename(myFile, str.c_str());

最佳答案

对于您想要做的,只需将 strncpy 行更改为此即可:

*newFile = '\0';

如果文件名包含早期的 .safe(如 file.safest.txt.safe),或者如果它不包含子字符串,这仍然会有问题.safe 完全没有。你最好从数组的末尾开始搜索,并确保你确实找到了一些东西。

这似乎是一种更好的方法(尽管在 C++ 中最好只使用 std::string):

char* filename = ...;
size_t filename_length = strlen( filename );
int safe_ext_pos = filename_length - 5; // 5 == length of ".safe"
if( safe_ext_pos > 0 && strcmp( ".safe", filename + safe_ext_pos ) == 0 )
filename[ safe_ext_pos ] = '\0';

这是代码的 std::string 版本:

std::string filename = ...;
int safe_ext_pos = filename.length() - 5; // 5 == length of ".safe"
if( safe_ext_pos > 0 && filename.compare( safe_ext_pos, 5, ".safe" ) == 0 )
filename.erase( safe_ext_pos );

关于c++ - 更改数组的最后 5 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com