c ++字符串函数

kri*_*itx 0 c++ linux

我正在尝试创建一个可以从主函数调用的字符串函数,但这会给出分段错误...任何想法???

也可以创建一个返回字符串的字符串函数.

#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)

ste*_*fan 7

你的函数callMe应该返回一个字符串,但你永远不会返回任何东西.

如果您启用了编译器警告,则会收到警告(我建议添加-Wall和-Wextra)

可以解决将返回类型更改stringvoid.

main但是该函数不需要return语句(但对于初学者来说,最好只添加return 0;):

从C++标准:

main中的return语句具有离开main函数(销毁具有自动存储持续时间的任何对象)并以返回值作为参数调用std :: exit的效果.如果控制到达main的末尾而没有遇到return语句,则效果是执行"return 0;"


cel*_*chk 6

问题是您已将函数声明为返回a string,但不返回一个.

有两种方法可以解决它:

  • 如果您不打算返回字符串,请更改callMe

    void callMe(string& k);

  • 如果你打算返回一个字符串,那么通过添加一个return语句,例如

    return "I'm returned from callMe, called with " + k;

另外,一些风格评论:

这将允许您在常量字符串和字符串文字上调用函数,例如 callme("I'm a string literal");

  • @GGG:不.首先,`main`*必须*返回`int`,所以改为`void`是没有选择的,其次,C++中的`main`有一个特殊的规则,到达`main`的末尾没有一个`return`相当于`return 0;`所以在这种情况下显式的`return`是*不*是必要的(但仍然可以被认为是好的风格). (3认同)