[英]Segmentation Fault in C command line arguments while trying to add to array
[英]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.