我正在尝试创建一个可以从主函数调用的字符串函数,但这会给出分段错误...任何想法???
也可以创建一个返回字符串的字符串函数.
#include <iostream>
#include <stdio.h>
#include <sstream>
using namespace std;
string callMe(string& k){
cout << "String from callMe: " << k;
}
int main(){
string k;
k = "K SHK";
cout << "String from main function: " << k << endl;
callMe(k);
}
Run Code Online (Sandbox Code Playgroud)
更新:
它编译好..
[root@server dev]# ./stringtest
String from main function: K SHK
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
你的函数callMe应该返回一个字符串,但你永远不会返回任何东西.
如果您启用了编译器警告,则会收到警告(我建议添加-Wall和-Wextra)
可以解决将返回类型更改string为void.
main但是该函数不需要return语句(但对于初学者来说,最好只添加return 0;):
从C++标准:
main中的return语句具有离开main函数(销毁具有自动存储持续时间的任何对象)并以返回值作为参数调用std :: exit的效果.如果控制到达main的末尾而没有遇到return语句,则效果是执行"return 0;"
问题是您已将函数声明为返回a string,但不返回一个.
有两种方法可以解决它:
如果您不打算返回字符串,请更改callMe为
void callMe(string& k);
如果你打算返回一个字符串,那么通过添加一个return语句,例如
return "I'm returned from callMe, called with " + k;
另外,一些风格评论:
在可能的定义点初始化变量是个好主意.在你的情况下,你写道:
string k = "K SHK";
Run Code Online (Sandbox Code Playgroud)
要么
string k("K SHK");
Run Code Online (Sandbox Code Playgroud)
如果您之后不打算修改字符串,您可能还会考虑定义const以捕获意外更改(例如,通过使用=而不是==):
string const k = "K SHK";
Run Code Online (Sandbox Code Playgroud)如果不更改参数callMe,则应使用const的引用:
void callMe(string const& k);
Run Code Online (Sandbox Code Playgroud)
RESP.
string callMe(string const& k);
Run Code Online (Sandbox Code Playgroud)这将允许您在常量字符串和字符串文字上调用函数,例如 callme("I'm a string literal");