c++ - strcat 替代问题 C++

标签 c++ operators strcat

我正在开发一个项目,该项目最初是在 C 中进行采样,但我想在 C++ 中进行。

有一个部分使用了 strcat(),有人告诉我使用替代方法。我找到了一个here ,但是当我尝试这些时,编译器会给我以下错误:

error: invalid operands of types char*' andchar*' 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/

相关文章:

c++ - 通过类成员函数与另一个成员调用线程时出现奇怪的行为。消费者保护计划

Java Swing、Corba 对象 - 如何在 DefaultListModel 中存储 Corba 对象?

c++ - 为什么 cout 不打印 extern "C"变量?

ios - Swift:为可选值创建一个中缀运算符,当空时提供默认值

java - 为什么用 XOR 交换整数变量在一行中不起作用?

c - 没有赋值就将字符串连接到另一个字符串中,这是为什么?

c - 关于 strcat()、strncpy()、strncat() 等字符串函数的问题?

c++ - main() 首先在这里定义

列表和一元运算符组合的 Perl 运算符优先级

c++ - 新手 C++;添加 char* 数组?