Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从c++;程序到c程序并返回_C++_Arrays_String - Fatal编程技术网

C++ 如何从c++;程序到c程序并返回

C++ 如何从c++;程序到c程序并返回,c++,arrays,string,C++,Arrays,String,我在rtstring.c文件中编写了一个string函数,它只接受一个字符串并返回相同的字符串。 然后我将这个文件包含在body.cpp文件中,我想从中传递字符串 将此文件转换为c文件。 我该怎么做请帮忙 我的代码 rtstring.c #include <stdio.h> char * rtstr(char * s) { return s; } 标题.h #pragma once class mystring { public: mystring(string

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

我的代码

rtstring.c

#include <stdio.h>
char * rtstr(char * s)
{ 
    return s;
}
标题.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;
}
#包括
使用名称空间std;
#包括“header.h”
int main()
{
字符串rs,s=“你好”;
mystring str1(s);
rs=str.strreturn(s);
库特
我发现返回类型不匹配的错误

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

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

string mystring::strreturn(string s1)
//                         ^^^^^^
{ 
    st=rtstr(s1);
//           ^^
您正试图将
std::string
传递到一个函数中,该函数需要
char*

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


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


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

首先,您不包含源文件。Yo您应该将rtstring.c作为自己的头,在其中声明函数
rtstr

第二,你使用C++编译器。如果你想用C++来模拟,你可以使用“代码”>使用“C”{…} /Cube >。C和C++之间仍然有基本的区别,所以你仍然使用C++的C子集,而不是实际的C.<


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

您的代码我不太清楚,但我理解您的问题

因此,最简单的方法之一就是使用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;
}
#包括
#include/*For exit()函数*/
int main()
{
chars[1000];
文件*fptr;
fptr=fopen(“program.txt”,“w”);
如果(fptr==NULL)
{
printf(“错误!”);
出口(1);
}
printf(“输入字符串:\n”);
获取(s);
fprintf(fptr,“%s”,s);
fclose(fptr);
返回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();
}
#包括
#包括
#包括
void main()
{
char c,fname[20]=“program.txt”;
clrsc();
ifstream-in(fname);
如果(!in)
{

我能想出一个最适合我要求的方法吗。 谢谢你的帮助,谢谢。 我所做的改动如下

body.cpp `

` 请插入适当的标题。 header.h和body.cpp中的“使用命名空间std;”
“#include”in header.h

请正确设置代码格式,并指出错误发生的位置以及确切的错误消息。在任何情况下:我看到std::string被传递给一个使用char*的函数,没有这种转换(假设
string
是std::string,很难说)你不能使用const char *bw吗?还有什么是字符串?应该采取STD::字符串的拷贝吗?你不需要一个单独的类。C++字符串不同于C字符串,它只是一个字符数组,我对你要做的事情感到非常困惑。<代码>:String < /Cord>包含处理C样式STRI的所有功能。ngs及其副本。使用c_str()这里是一个很好的例子,用C语言调用一些C++代码:我不想使用FILCHECK下一个选项。谢谢!我确实找到了一个不用PIPEYE的方法。我已经通过返回指针来完成它。但是我需要字符串。format@nikhil那么,您可以改为修改
rtstr
以获取
std::string相反,但它不能在C中实现。如果接受为字符串,然后将其转换为C类型字符串,并将其传递给C特定的函数,我说过:您可能会发现
std::string::C_str()
成员函数很有用。
extern“C”不做下面的代码C代码!它只把ABI和名称装入C,其余的还有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;
}
#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();
}
string mystring::strreturn(string s1)
{
char *p,arr[9];
char *c=new char[s1.size()+1];
copy(s1.begin(),s1.end(),c);
c[s1.size()]='\0';
p=rtstr(c);
strcpy(arr,p);
st=arr;
return st;
}