我一直在爲學校編寫一個C++代碼項目,它希望我從命令行參數中讀取文本文件,並輸出它,並添加命令中聲明的形容詞在任何文章之後行[a,an,the]。這是我第一次爲任何項目使用命令行。在C++程序中讀取命令行參數時出現內存錯誤
我已經設法從命令行讀取文本文件,但我的問題是當我想要獲取字符串作爲函數isArticle()的參數時,我一直在UNIX shell中收到以下消息:
./test-program1[38]: eval: line 1: 7704: Memory fault
0a1,4
我不懷疑問題出在isArticle()
功能,但在這裏它是:
bool isArticle(string n)
{
string article[]={"a","an","the","A","An","aN","AN","The","tHe","thE","THe","tHE","ThE","THE"};
for(int i=0;i<sizeof(article);i++)
{
if(n.compare(article[i])==0)
return true;
}
return false;
}
雖然它不是完整的,下面是我用它來查看是否isArticle一些測試代碼()函數正在工作:
int main(int argc, char *argv[])
{
istream *br;
ifstream file;
if(argc == 1)
br = &cin;
else if(argc==3)
{
file.open(argv[2]);
if(file.is_open())//put work here
{
br=&file;
string word;
string output[sizeof(file)];
while(file>>word)
{
if(isArticle(word)==true)
{
cout<<word;
}
}
}
else
{
usage(argv[2],"Cannot open "+string(argv[2]));
return 1;
}
}
else
{
usage(argv[1], "More than one filename was given");
return 1;
}
return 0;
}
你應該檢查'sizeof(article)'和'sizeof(file)'do(不是你想象的那樣)。 – juanchopanza 2015-02-08 17:47:29
爲了擴大juanchopanza的說法,'sizeof(article)'將會是相當大的比14大很多,但這就是數組中定義了多少個字符串。這是一個很好的東西,你包括'isArticle()'函數,因爲這是麻煩的根源 - 所以感謝你包括它。當像這樣的函數中有數組定義時,數組中元素的數量爲'sizeof(article)/ sizeof(article [0])''。這對陣列參數不起作用;那麼調用代碼需要明確傳遞大小。 – 2015-02-08 17:53:16
如果將字符串轉換爲全部小寫或全部大寫,則不需要進行多次比較。搜索「C++ transform tolower toupper」 – 2015-02-08 17:54:50