C++ 字符串函数

c++ string function

本文关键字:函数 字符串 C++      更新时间:2023-10-16

>我正在尝试创建一个可从主函数调用的字符串函数,但这会产生分段错误...有什么想法吗???

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

#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

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

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

可以将返回类型从 string 更改为 void 来解决。

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

):

从C++标准:

main

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

问题是你已经将你的函数声明为返回一个string,但不返回一个。

有两种方法可以修复它:

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

    void callMe(string& k);

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

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

此外,一些样式注释:

  • 在可能的情况下,最好在定义点初始化变量。在你的情况下,你会写:

    string k = "K SHK";
    

    string k("K SHK");
    

    如果您不打算在之后修改字符串,您还可以考虑将 is 定义为const以捕获意外更改(例如,通过使用 = 而不是 ==):

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

    void callMe(string const& k);
    

    string callMe(string const& k);
    

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

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

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

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

在你的函数callMe中没有return。尝试:

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

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

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

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

string callMe(string& k){
    string returnValue("String from callMe: ");
    returnValue += k;
    cout << returnValue << endl;
    return returnValue;
}