簡體   English   中英

嘗試檢查命令行參數(在C中)時出現分段錯誤

[英]Segmentation fault when trying to check command line arguments (in C)

我想在命令行中提供幾個參數,例如:

./programName -a 103 -p argument1,argument2,argument3

然后,我想用這些參數的值創建幾個變量:一個整數變量用於標記-a之后的數字,一個整數變量用於參數在標志-p之后的數目,以及一個數組變量,所有這些參數。

它始終是相同的參數(因此我的代碼無法管理其他形式的輸入):-a(整數)-p(用,分隔的參數列表)

我的問題是存在細分錯誤。 在嘗試查看它發生在哪里的幾次嘗試之后(使用了幾個printf ),當變量a = 3時(在標志-p處)存在分段錯誤。 分割發生在“ case'p'”行。

我不明白為什么這段代碼接受參數“ -a”而不接受參數“ -p”。 而且我不認為存在錯誤是因為我的代碼在“ case'p'”中,因為分段錯誤是在此之后發生的(在“ case'p'”行上)。

希望您能理解我的問題,並感謝您的幫助:)。

編輯:

感謝Mark Wilkins和ooga的回答。 分割錯誤的確是由於未初始化數組的各個元素。 如果有些人不知道如何有效地初始化字符串數組,請檢查另一個問題,這很好地解釋了;):

初始化字符串數組

導致分段錯誤的一個問題是使用arg_p 它被聲明為char*數組,但從未初始化該數組的各個元素。 隨后使用它會導致訪問未初始化的指針:

*(arg_p[b]+c) = *(chrp+c);

在組裝參數數組時會發生段錯誤。 嘗試以下方法:

    arg_p[0] = chrp;
    chrp2 = strchr(argv[a+1], ',');
    int b = 1;
    while (chrp2 != NULL) {
        *chrp2 = '\0';
        arg_p[b++] = chrp2 + 1;
        chrp2 = strchr(chrp2 + 1, ',');
    }

還要注意,您的arg_p數組是在該塊本地聲明的,在該塊之后將不復存在。 您可能需要聲明一個char** arg_p指針並malloc該空間。 記住最后要釋放它。

當將“ a”增加2時,您將離開argv數組的末尾。 您只想增加1,因為它是索引命令行中的單詞(用空格分隔)而不是字符的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM