我正在开发一个项目,该项目最初是在 C 中进行采样,但我想在 C++ 中进行。
有一个部分使用了 strcat(),有人告诉我使用替代方法。我找到了一个here ,但是当我尝试这些时,编译器会给我以下错误:
error: invalid operands of types
char*' and
char*' to binary `operator+'
我做错了什么吗?
编辑:
下面是代码中不起作用的部分
FILE *FileOpen(string *fname, string* mode){
FILE *fp;
string *str = "";
str += "tmp/"; //all files to be created in temporary sub directory
str += fname;
if((fp=fopen(str,mode))==NULL){
fprintf(stderr,"Cannot open file: %s\n", &fname);
exit(1);
}
FileReader(fname);
return(fp);
}
编辑 2: 对于那些想知道为什么我有 FileReader 的人:它用于项目的第 2 部分。反汇编代码。
最佳答案
感谢您发布代码;现在问题很明显了。
您应该使用字符串对象,而不是指向它们的指针。
FILE *FileOpen(string fname, string mode)
{
string str = "";
str += "tmp/"; //all files to be created in temporary sub directory
str += fname;
FILE *fp = fopen(str.c_str(), mode.c_str());
if (!fp) {
fprintf(stderr, "Cannot open file: %s\n", fname.c_str());
exit(1);
}
FileReader(fname);
return fp;
}
一个很好的下一步是转移到接受 std::string
参数的 I/O 函数,这样你就不必说 .c_str()
无处不在。
我也很困惑为什么你的文件打开函数中有 FileReader(fname)
。这违反了单一职责原则,两次。打开一个文件不应该导致它被读取,读取文件的代码应该使用 FILE*
并且不关心文件名是什么(除了可能生成错误消息)。
关于c++ - strcat 替代问题 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15056905/