[英]How do I fix output from command-line arguments to printing out the correct integers?
#define N 10
int main(int argc, char *argv[])
{
int *a = malloc(sizeof(N));
int i;
for(i = 1; i < argc; i++) {
*(a++) = atoi(argv[i]);
}
i = 0;
while(i < N) {
printf("%d ", *(a++));
i++;
}
}
我對為什么我的輸出全為0感到困惑。 我不太確定如何解決它,因為我是命令行參數/指針的新手。 該程序的背景是,它接受整數,然后使用atoi將其從字符串轉換為整數,然后使用指針算術將新數組打印出來。
這有很多錯誤。
sizeof(N)給出一個整數常量的大小(大約4個字節)。 您的意思是malloc(N * sizeof(int)); 但是,如果N是Mall,並且您在編譯時就知道了,那么使用malloc沒有什么意義。 您想分配argc ints。 然后,該程序將擴展到數百萬個命令行參數,並假設shell允許輸入這么長的行。
然后,當您分配一個指針時,您需要掛在它上面。 不要增加它。 如果要使用移動指針,請使用兩個指針a和ptr。 a指向緩沖區並“擁有”它,ptr是一個隨其移動的臨時項。 但是,數組語法a [i]幾乎總是比行進指針更可取。
然后,如果argc小於N,則最后一會打印垃圾值。這可能是您在學習練習/探索性編程中想要的,但不是您通常希望實現的值。
根據我的判斷,這是您的家庭作業的解決方案。 請注意以下幾點:
N
,它將仍然存在段錯誤 #define N 10
int main(int argc, char *argv[])
{
int *numbers;
if (NULL != (numbers = malloc(N * sizeof *numbers))) {
for(int i = 0; i < (argc - 1); i++) {
*(numbers + i) = atoi(argv[i + 1]);
}
for(int* a = numbers; a < (numbers + (argc - 1)); a++) {
printf("%d ", *(a));
}
free(numbers);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.