将函数值返回给main() - C ++

时间:2013-09-05 10:45:51

标签: c++ function file-io return function-pointers

我想将函数值返回main()。这是我的代码:

#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <fstream>

using namespace std;

void Cryp(char *str){
    int len = strlen(str);
    int ch;
    for(int i=0;i<len;i++){
        ch = str[i];
        ch = ~ch;
        str[i]=ch;
    }
}

char Deco(char *DESTINATION){

  string line,str;
  ifstream myfile(DESTINATION);

  if (myfile.is_open()) 
  {
    while (getline (myfile,line))
    {
      string str(line); 
      str.erase (str.begin()+0, str.end()-9);
      cout<<str; // THIS HAS TO BE RETURNED TO main()!-BUT HOW ??
    }
    myfile.close();
    //remove(DESTINATION);
  }

  else cout << "Unable to open file";

  return str.c_str();  
}

int Dec(char *SOURCE, char *DESTINATION){
    char Byte;

    FILE *inFile = fopen(SOURCE,"rb");
    FILE *outFile = fopen(DESTINATION,"wb");

    if(inFile==NULL||outFile==NULL){
        if(inFile) fclose(inFile);
        if(outFile) fclose(outFile);
        return 1;
    }
    else{
        while(!feof(inFile)){
            Byte = (char)fgetc(inFile);
            char newString[256];
            sprintf(newString, "%c", Byte);
            Cryp(newString);
            fputs(newString, outFile);
        }
        fclose(inFile);
        Deco(DESTINATION);
    } 

    return 0;
}

main()
{
    Dec("/home/highlander/NetBeansProjects/simple/dist/Debug/GNU-Linux-x86/text.dat","/home/highlander/NetBeansProjects/simple/dist/Debug/GNU-Linux-x86/text_instant.dat");
    cout<< Deco(char);
}

如何将函数str中的char Deco(char *DESTINATION)值传递给main()

提前致谢...

3 个答案:

答案 0 :(得分:2)

只需返回std::string

std::string Deco(char *DESTINATION){

   // rest of code here

   return str;
}

此外,您遗失了int的{​​{1}}返回说明符,而main没有任何意义。

另外,请更改一行:

Deco(char)

string str(line); 

答案 1 :(得分:1)

您正在返回指向局部变量的指针。这给了一个指向调用者的悬空指针,并且是未定义的行为。除此之外,返回类型与您返回的类型不匹配。

通过返回std::string

,您可以省去一些麻烦
std::string Deco(const char *DESTINATION)
{
 ....
 return str;
}

int main()
{
  std::cout << Deco("Hello") << std::endl;
}

答案 2 :(得分:1)

更改

char Deco(char *DESTINATION){

string Deco(char *DESTINATION){

然后在main中,您可以将返回值分配给字符串或使用内联

string deco = Deco(...

cout<<Deco(...