2016-12-04 84 views
-2

聲明一個字符串後,出現分段錯誤。 我不知道如何解決這個錯誤 - 你能解釋一下嗎?字符串聲明分段錯誤

代碼版本1(使用typedef char *string;cs50.h):

int main (int argc, string argv[]) 
{ 
    string key = argv[1]; 
    checkKey(key, argc); 
} 

int checkKey(string text, int n) 
{ 
    //check if text is alphabetical and if argc has the desired amount of command-line elements 
} 

代碼版本2:

#include <stdio.h> 
#include <ctype.h> 
#include <cs50.h> 

int main (int argc, char* argv[]) 
{ 
    printf("%d elements in argc and %s in argv[1]\n", argc, argv[1]); 
    char* key = argv[1]; 
} 
+1

「string」聲明在哪裏?它是C++嗎?或typedef?而當你打電話給你的主要你傳遞參數? –

+0

你定義了'string'somewhere?你怎麼稱呼你的程序?如果沒有參數,argv [1]將無效。 – Gerhardh

+2

在訪問任何'argv'之前檢查'argc'。 –

回答

0

如果你不使用命令行參數運行您的程序,它收到argc和價值1數組argv,大小爲2,程序名稱爲argv[0]NULL,在argv[1]

如果函數charkKey()將其接收的指針作爲其第一個參數解引用,則會調用未定義的行爲,這可能會導致分段錯誤。