簡體   English   中英

警告:賦值使指針從整數變為整數而不進行強制轉換[默認啟用]

[英]warning: assignment makes integer from pointer without a cast [enabled by default]

我的代碼是:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]){
    int i = 0;
    int count = argc - 1;
    char *numbers = malloc(count * sizeof(char));
    for(i = 1 ; i <= argc ; i++){
       printf("%s ", argv[i]);
       numbers[i] = argv[i];
    }
    printf ("%s \n", numbers);
    return 0;
}

出現的錯誤是:

tamal @ baba-desktop:〜/ Desktop / c $ cc實驗。c -o實驗

Experiment.c:在函數“ main”中:

experiment.c:10:16:警告:賦值從指針生成整數而無強制轉換[默認啟用]

我嘗試過 numbers[i] = &(argv[i]); 在第10行。結果仍然相同。

在您的代碼中, numbers[i]的類型為char ,而argv[i]的類型為char *並且兩者都不相同。 這就是為什么出現警告的原因。

在第二種情況下, numbers[i] = &(argv[i]); 也是錯誤的,因為&(argv[i]); 也不是char

最重要的是,您有一個char指針numbers並且在其上使用索引運算符時,會得到單個元素作為char ,即所有numbers[i]均為char類型。 您需要為其分配另一個char值。

您必須兩次取消引用argv才能獲得char值numbers[i] = *(*(argv + i));

應當這樣做,就好像有兩個以上的參數一樣:

int count = argc - 1;
char **numbers = (char **)malloc(count * sizeof(char*));
for(i = 0 ; i < argc ; i++){
   printf("%s ", argv[i + 1]);
   // Stores all arguments except "experiment"(i.e. exe file).
   numbers[i] = argv[i + 1];
}
for(i = 0; i <= count; i++){
   printf("%s\n", numbers[i]);
}

如果只有兩個參數,則應簡單地執行以下操作:

char *number = (char *)malloc(1*sizeof(char));
// Store argument other than provided .exe file i.e. "experiment"
number = argv[1];
printf("%s\n", number);

暫無
暫無

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

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