如何将字符串从c ++程序传递给c程序并返回

时间:2017-05-29 07:28:36

标签: c++ arrays string

我有一个用rtstring.c文件编写的字符串函数,它只接受一个字符串并返回相同的字符串。 然后我将此文件包含在body.cpp文件中,我想从中传递字符串 这个文件到c文件。 我该怎么做才能帮忙

我的代码

rtstring.c

#include <stdio.h>
char * rtstr(char * s)
{ 
    return s;
}

body.cpp

#pragma once 
#include "header.h"
#include "rtstring.c" 
mystring::mystring(string str)
{
    st=str;
}   
string mystring::strreturn(string s1)
{ 
    st=rtstr(s1);
    return st;
}

header.h

#pragma once
class mystring
{
public:
    mystring(string a);
    string strreturn(string s1);
private:
    string st;
}

的main.cpp

#include <iostream> 
using namespace std;
#include "header.h"
int main()
{
    string rs,s="hi hello";
    mystring str1(s);
    rs=str.strreturn(s);
    cout<<"string from c"<<rs;
    return 0;
}

我收到返回类型不匹配和许多相关错误的错误。无论如何都要帮忙处理它。一个例子将是有帮助的。 提前致谢

4 个答案:

答案 0 :(得分:2)

  

我收到错误的返回类型不匹配

如果您要阅读完整的错误消息,我确定它会告诉您这是问题所在:

char * rtstr(char * s)
//           ^^^^^^

string mystring::strreturn(string s1)
//                         ^^^^^^
{ 
    st=rtstr(s1);
//           ^^

您正在尝试将std::string传递给期望char*的函数。

要解决此问题,请勿尝试将std::string传递给期望char*的函数。您可能会发现std::string::c_str()成员函数很有用。

#include "rtstring.c" 

不要包含源文件。特别是不要包含用其他语言编写的源文件。

要调用另一个源文件中定义的函数,只需在调用源中声明该函数并链接另一个源的目标文件。请记住在声明跨语言函数时设置语言链接。您将找到用于包含函数声明的头文件。

答案 1 :(得分:0)

您的代码对我来说不太清楚,但我理解您的问题。

因此,最简单的方法之一是使用C编程将字符串写入文件,然后在cpp程序中读取相同的文件。

你的C程序写入文件:

#include <stdio.h>
#include <stdlib.h>  /* For exit() function */
int main()
{
   char s[1000];
   FILE *fptr;

   fptr = fopen("program.txt", "w");
   if(fptr == NULL)
   {
      printf("Error!");
      exit(1);
   }

   printf("Enter your string:\n");
   gets(s);

   fprintf(fptr,"%s", s);
   fclose(fptr);

   return 0;
}

你的cpp程序就是这样读取同一个文件。

#include<iostream.h>
#include<conio.h>
#include<fstream.h>
void main()
{
              char c,fname[20] = 'program.txt';
              clrscr();
              ifstream in(fname);
              if(!in)
              {
                            cout<<"File Does not Exist";
                            getch();
                            return;
              }
              cout<<"\n\n";
              while(in.eof()==0)
              {
                            in.get(c);
                            cout<<c;
              }
              getch();
}

另一种选择可能是使用pipe()功能。 More details.

答案 2 :(得分:0)

我已经找到了最符合我要求的方式。 感谢您的帮助。 我所做的改变如下

body.cpp `

int index = -1;     
for (int i=0; i< [arrJSON count]; i++){
    NSDictionary *dict = [arrJSON objectAtIndex:i];

    if ([[dict objectForKey:@"id"] isEqualToString:@"123456"]){
       NSLog(@"Found at index: %d",i);
       index = i;
       break;
    }
}
if (index == -1){
    NSLog(@"ID not found");
}

` 请插入适当的标题。 &#34;使用命名空间std;&#34;在header.h和body.cpp中都有 &#34;#包括&#34;在header.h中

答案 3 :(得分:-1)

首先,您不包含源文件。你应该使rtstring.c成为自己的标题,你在其中声明函数rtstr

其次,您正在使用C ++编译器。如果您希望它模拟C,请使用using "C" { ... }。正确的C和C ++之间仍然存在根本区别,所以你仍然使用C ++的C子集,而不是实际的C.

最后,如果您想将std::string转换为C字符串(char*),则可以使用其c_str()函数。