[英]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.