我编写了以下代码,接受以逗号分隔的人口值。然后,我分割输入的字符串并将其存储到数组中。现在,我想存储一个双,所以我可以在它上面执行数学函数。但首先,我想将其输出为double。我试过strtod,但它给了我一个错误
passing argument 1 of '__strtod' makes pointer from integer without a cast [- Wint-conversion]
这是我的主要功能
int main(int argc, char const *argv[])
{
int p_size, s_size;
int n =0;
char *population;
char population_string[100];
printf("Enter the population size:");
scanf("%d",&p_size);
printf("Enter the sample size:");
scanf("%d",&s_size);
printf("Enter the population values separated by comma(,):");
scanf("%s",&population_string);
printf("The population are:%s\n",population_string);
population = splitPopulation(population_string,p_size);
printf("The contents are:\n");
for (int i = 0; i < p_size; i++)
{
printf("%c\n",population[i]);
printf("%f\n", strtod(population[i],NULL));
}
return 0;
}
这是我分割字符串
的功能char * splitPopulation(char *population_string, int size){
char *population_array=malloc(sizeof(char*)*size);
char *token = strtok(population_string,",");
for (int i = 0; i < size; i++)
{
population_array[i]= *token;
token= strtok(NULL,",");
}
return population_array;
}
我的示例输入是:
Enter the population size:4
Enter the sample size:2
Enter the population values separated by comma(,):1,2,3,4
答案 0 :(得分:1)
让我们从splitPopulation开始工作。此函数返回指向char
的指针char *
但你真正返回的是一个指向char的指针数组,这意味着类型是:
char **
换句话说,返回值是一个指针,它指向的是另一个指针,它指向逗号分隔的总体字符串中第一个数字的第一个字符。
所以现在population是char **而不是char *,而population [i]是char *而不是char,所以你可以将它传递给strtod。 (您正在看到有关将int作为指针传递的警告,因为population [i]当前是一个char并且正被提升为int。)
您还必须将population_array定义为char **。分配population_array [i]时,只需将其分配给不带deference运算符的标记。
答案 1 :(得分:-1)
你这样做:
strtod(population[i],NULL)
其中population[i]
是单个char
,它是ASCII中的数字。您不需要将单个char
从ACSII转换为整数的函数:
double pop_num = population[i] - '0';
即,&#39; 0&#39;变为0,&#39; 1&#39;变为1等。请参阅ASCII表了解其工作原理。
顺便说一句,你的malloc分配的数量比需要的数量多4-8倍,因为当你的元素实际上是sizeof(char*)
而不是char
时,它会使用char*
。