C++ 如何从c++;程序到c程序并返回
我在rtstring.c文件中编写了一个string函数,它只接受一个字符串并返回相同的字符串。 然后我将这个文件包含在body.cpp文件中,我想从中传递字符串 将此文件转换为c文件。 我该怎么做请帮忙 我的代码 rtstring.cC++ 如何从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
#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;
}