簡體   English   中英

從命令行參數分配數組

[英]Allocate array from command line parameters

我正在開發一個小型C應用程序,正在從命令行捕獲值。 我想捕獲該值並將其用於初始化數組。 這就是我想要做的。

int main(int argc, char* argv[]) {
    int option = atoi(argv[2]);
    int values[option];
    ......
 }

我正在編譯,因為我的選項變量不是const。 錯誤:錯誤2錯誤C2057:預期的常量表達式

有辦法嗎?

謝謝你的幫助!

如果大小在編譯時未知,則需要使用malloc動態分配內存:

 int main(int argc, char* argv[]) {
    int option = atoi(argv[2]);
    int* values = malloc(option * sizeof(int));
    /* ...... */
    free(values); /* Deallocate the memory when you are done with it */
 }

如果您的編譯器支持C99,則(如果您不介意生活有點危險,因為無需檢查是否已定義argv [2]或其中的值可以轉換為合理的正整數),則可以編寫:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
    int option = atoi(argv[2]);
    char *values[option];
    int i;
    int n = argc - 3;
    for (i = 0; i < n; i++)
        values[i] = argv[i+3];

    for (i = 0; i < n; i++)
        printf("values[%d] = %s\n", i, values[i]);
    return 0;
}

這將使用C99 VLA(可變長度數組)功能進行編譯和運行。 注意,我將“值”的類型更改為“字符*”,主要是為了懶惰-完成任務。

該警告消息似乎來自MSVC,並且MSVC 2010仍然不支持C99中添加的許多額外功能。 因此,對於該環境,您將不得不依靠內存分配:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
    int option = atoi(argv[2]);
    char **values = malloc(option * sizeof(*values));
    int i;
    int n = argc - 3;
    for (i = 0; i < n; i++)
        values[i] = argv[i+3];

    for (i = 0; i < n; i++)
        printf("values[%d] = %s\n", i, values[i]);

    free(values);
    return 0;
}

需要注意的一點是:' sizeof '的操作數是' *values ',即使您將' values '的類型從' char ** '更改回' int * ',也將保持大小正確。 如果我寫了“ sizeof(char *) ”,則必須更改兩件事-“ values ”的聲明和“ sizeof() ”中的類型名稱。

暫無
暫無

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

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