0

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

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

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

}

更新:

它编译得很好..

[root@server dev]# ./stringtest 
String from main function: K SHK
Segmentation fault
4

6 回答 6

7

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

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

将返回类型从 更改为 是可以解决stringvoid

然而,该main函数不需要 return 语句(但对于初学者来说,添加 可能会更好return 0;):

从 C++ 标准:

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

于 2012-08-19T10:19:28.963 回答
6

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

有两种方法可以修复它:

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

    void callMe(string& k);

  • 如果您确实打算返回一个字符串,那么通过添加一个 return 语句来执行此操作,例如

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

此外,一些风格评论:

  • 尽可能在定义点初始化变量是个好主意。在你的情况下,你会写:

    string k = "K SHK";
    

    或者

    string k("K SHK");
    

    如果您以后不打算修改字符串,您也可以考虑定义 isconst以捕获意外更改(例如,通过使用 of=而不是==):

    string const k = "K SHK";
    
  • 如果不更改 中的参数callMe,则应使用对 const 的引用:

    void callMe(string const& k);
    

    分别

    string callMe(string const& k);
    

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

于 2012-08-19T10:18:51.733 回答
1
void callMe(string& k){

    cout << "String from callMe: " << k;

}

由于您已将 Callme 声明为返回字符串的函数,而另一方面您什么也不返回,因此此类代码可能会导致分段错误。(因为 eax 中的值未定义)。

于 2012-08-19T10:18:22.703 回答
0

callMe() 和 main() 函数必须返回一些东西......

于 2012-08-19T10:20:15.603 回答
0

在您的功能callMe中没有return. 尝试:

void callMe(string& k)
{
   cout << "String from callMe: " << k;
}

main()函数必须返回一个int(通常为 0)。

Ps:如果不修改函数中的字符串 k ,请使用 const reference const string&

于 2012-08-19T10:21:24.820 回答
0

也可以创建一个返回字符串的字符串函数。当然。对上面的原始代码稍作修改,它看起来像这样......

string callMe(string& k){
    string returnValue("String from callMe: ");
    returnValue += k;
    cout << returnValue << endl;
    return returnValue;
}
于 2012-08-19T11:01:48.827 回答