C++;函数中的分段错误 学习一些基本的C++,试图理解函数,但是有一段时间试图正确地编写函数。 以下是原始代码(工作正常): #包括 #包括 //#包括“assn.h” 使用名称空间std; int main() { 字符串用户输入; char ch1='-'; cout='a'&&userinput。在(i)

C++;函数中的分段错误 学习一些基本的C++,试图理解函数,但是有一段时间试图正确地编写函数。 以下是原始代码(工作正常): #包括 #包括 //#包括“assn.h” 使用名称空间std; int main() { 字符串用户输入; char ch1='-'; cout='a'&&userinput。在(i),c++,string,function,segmentation-fault,C++,String,Function,Segmentation Fault,中,您将参数input按值传递给函数。这意味着它将在main中获取变量的副本。任何更改仅在此副本上执行,不会影响原始值 请尝试通过引用传递,string& 另外,函数有一个返回类型string,但我在函数中没有看到任何return语句。请返回一些值或将返回类型更改为void尝试以下操作: #include <iostream> #include <string> //#include "assn.h" using namespace std; void inputUn

中,您将参数
input
按值传递给函数。这意味着它将在
main
中获取变量的副本。任何更改仅在此副本上执行,不会影响原始值

请尝试通过引用传递,
string&

另外,函数有一个返回类型
string
,但我在函数中没有看到任何
return
语句。请返回一些值或将返回类型更改为
void
尝试以下操作:

#include <iostream>
#include <string>
//#include "assn.h"

using namespace std;

void inputUnsolved(string &input);

int main()
{
        string userinput;
        cout << "Enter word: ";
        getline(cin, userinput);
        inputUnsolved(userinput);
        cout << userinput << endl;
        return 0;
}

void inputUnsolved(string &input)
{
   char ch1 = '-';
   for (int i=0; i<input.size(); ++i)
   {
      if (input.at(i) >= 'a' && input.at(i) <= 'z')
         input.at(i) = ch1;
   }
}
#包括
#包括
//#包括“assn.h”
使用名称空间std;
无效输入未解决(字符串和输入);
int main()
{
字符串用户输入;

不能通过引用来代替

void inputUnsolved(string& input);

你做了一些错误的事情:

  • 您传递了
    字符串
    ,并希望被编辑,这是错误的
  • 您将函数定义为返回不返回任何内容的字符串
  • 你在做一些坏事:

  • 使用命名空间std
    这是一种糟糕的做法
  • 使用
    int
    对有符号类型且小于可能大小的索引进行索引
  • 这是您问题的解决方案:

    #include <iostream>
    #include <string>
    
    
    std::string inputUnsolved(const std::string& input);
    
    int main()
    {
            std::string userinput;
            std::cout << "Enter word: ";
            std::getline(std::cin, userinput);
    
            userinput=inputUnsolved(userinput);
    
            std::cout << userinput << std::endl;
            return 0;
    }
    
    std::string inputUnsolved(const std::string& input)
    {
        std::string result;
        result.reserve(input.size());
        char ch1 = '-';
    
        for (std::size_t i=0; i < input.size(); ++i)
        {
            if (input.at(i) >= 'a' && input.at(i) <= 'z'){
                result.push_back(ch1);
            }
            else{
                result.push_back(input.at(i));
            }
        }
        return  result;
    }
    
    #包括
    #包括
    std::字符串输入未解决(const std::字符串和输入);
    int main()
    {
    std::字符串用户输入;
    
    std::cout试试这个,它肯定会对您有用。问题是您通过值而不是引用传递变量输入,因为如果不是,无论您输入什么,它都不会更改为“---”,当您使用reference时,请确保您修改了相同的变量entred。我添加的第二件事是,您不需要将函数的返回值设置为字符串,使其更简单,并将其设置为void

      #include <iostream>
        #include <string>
        //#include "assn.h"
    
        using namespace std;
    
        void inputUnsolved(string& input);
    
        int main()
        {
                string userinput;
                cout << "Enter word: ";
                getline(cin, userinput);
    
                inputUnsolved(userinput);
    
                cout << userinput << endl;
                return 0;
        }
    
        void inputUnsolved(string& input)
        {
            char ch1 = '-';
    
            int i = 0;
            for (i; i < input.size(); ++i)
            {
                if (input.at(i) >= 'a' && input.at(i) <= 'z')
                    input.at(i) = ch1;
            }
    
    
        }
    
    #包括
    #包括
    //#包括“assn.h”
    使用名称空间std;
    无效输入未解决(字符串和输入);
    int main()
    {
    字符串用户输入;
    
    无法确定是否与段错误相关,但(1)参数
    input
    是按值传递的,它将被复制,并且与
    main()
    中的变量
    userinput
    无关(2)您应该在
    inputUnsolved()中返回sth
    。它不能很好地编译,因为您在
    inputUnsolved
    中没有返回语句,这是一个编译错误。因此,必须有更多的代码使它崩溃。谢谢Bo!我将进行这些更改,看看我是否有更好的运气it@songyuanyaoThx,现在修好了谢谢!摆脱了Segfault明白了,谢谢!我对na不太了解梅斯佩斯,我只知道我的教授让我们用它。那它不是最佳的呢?
    void inputUnsolved(string& input);
    
    #include <iostream>
    #include <string>
    
    
    std::string inputUnsolved(const std::string& input);
    
    int main()
    {
            std::string userinput;
            std::cout << "Enter word: ";
            std::getline(std::cin, userinput);
    
            userinput=inputUnsolved(userinput);
    
            std::cout << userinput << std::endl;
            return 0;
    }
    
    std::string inputUnsolved(const std::string& input)
    {
        std::string result;
        result.reserve(input.size());
        char ch1 = '-';
    
        for (std::size_t i=0; i < input.size(); ++i)
        {
            if (input.at(i) >= 'a' && input.at(i) <= 'z'){
                result.push_back(ch1);
            }
            else{
                result.push_back(input.at(i));
            }
        }
        return  result;
    }
    
      #include <iostream>
        #include <string>
        //#include "assn.h"
    
        using namespace std;
    
        void inputUnsolved(string& input);
    
        int main()
        {
                string userinput;
                cout << "Enter word: ";
                getline(cin, userinput);
    
                inputUnsolved(userinput);
    
                cout << userinput << endl;
                return 0;
        }
    
        void inputUnsolved(string& input)
        {
            char ch1 = '-';
    
            int i = 0;
            for (i; i < input.size(); ++i)
            {
                if (input.at(i) >= 'a' && input.at(i) <= 'z')
                    input.at(i) = ch1;
            }
    
    
        }