[英]warning: assignment makes pointer from integer without a cast [enabled by default]
[英]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.