2015-06-18 37 views
0

我正在编写一个函数在C++中使字符串小写。它工作得很好,但在最后一个字符之后,它会出现分段错误。我的代码如下:在字符串上循环提供分段错误

#include <cctype> 
#include <string> 
#include <iostream> 
using namespace std; 

string lowercase(string str) 
{ 
    string ans = str; 
    for (int i=0; i < ans.size(); i++) 
    { 
     ans[i] = tolower(ans[i]); 
     cout << ans[i]<<endl; 
    } 
} 

int main() 
{ 
    lowercase("TEST"); 
    return 0; 
} 

我应该怎么做才能解决这个问题?

+4

尝试履行诺言,从该函数返回的东西,或者改变返回类型为'void'。并提出警告;这应该被抓住了。 – WhozCraig

+0

为什么不使用'transform'? –

+0

你返回“垃圾”,并在该垃圾上调用析构函数。 – fukanchik

回答

3

打开的警告,你可以自己发现错误:

g++ -o main main.cpp -Wall 

错误:

main.cpp: In function ‘std::string lowercase(std::string)’: 
main.cpp:9:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] 
    for (int i=0; i < ans.size(); i++) 
        ^
main.cpp:14:1: warning: no return statement in function returning non-void [-Wreturn-type] 
} 

你的函数返回一个字符串,但你有没有指定的字符串返回。
您可以通过返回您变量解决这个问题:

string lowercase(string str) 
{ 
    string ans = str; 
    for (int i=0; i < ans.size(); i++) 
    { 
     ans[i] = tolower(ans[i]); 
     cout << ans[i]<<endl; 
    } 
    return ans; 
}