簡體   English   中英

解析命令行參數時出現分段錯誤

[英]Segmentation fault when parsing command line arguments

我遇到了分段錯誤,無法隔離錯誤的來源。 我認為出於某種原因argv和argc無法獲取值,但是我無法弄清楚原因。

這是我的代碼的第一部分。

int main(int argc, char **argv)
{
int i;
int numArrays = 0;
int test = 0;
int opt = 0;

printf ("Parsing....\n");  // This line gets printed
printf(argv);    // this one doesn't even if being flushed immediately after
printf(argc);    // when the previous line is deleted, this line also won't print
fflush(stdout); 
opt =  getopt(argc, argv, optString);  //  defined as optString = "qmc";

while (opt != -1) {
    printf (opt);
    switch (opt) {
    //prevents program from printing to a file
    case 'q':
        tofile = 1;
        break;
    // max size of the prime numbers
    case 'm':
        maxPrime = atoi(optarg);
        break;

    case 'c':
        numProcs = atoi(optarg);
        break;

    default:
        break;
    }
}

我試圖弄清楚發生了什么,但是我看不到argc和argv為什么沒有獲取值。 我之前使用了完全相同的解析代碼,並且運行良好。 通常,分段錯誤非常容易(訪問您不應該訪問的內存位置),但是沒有理由我不應該訪問命令行參數。

您對如何使用printf感到困惑。 您當前正在做的事情是大禁忌:

printf(argv);
printf(argc);

該函數需要一個const char*字符串,該字符串指定輸出和可選變量參數列表的格式。 您正在傳遞一個不是字符串的雙指針和一個甚至不是指針的整數!

您想要這樣的東西:

printf( "Number of arguments: %d\n", argc );
for( int i = 0; i < argc; i++ ) {
    printf( "Arg %d: %s\n", i, argv[i] );
}

在此處閱讀有關printf信息: http : //en.cppreference.com/w/c/io/fprintf

暫無
暫無

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

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