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;
}
}