如何在C中将指针转换为double?

时间:2017-02-19 05:07:08

标签: c arrays pointers

我编写了以下代码,接受以逗号分隔的人口值。然后,我分割输入的字符串并将其存储到数组中。现在,我想存储一个双,所以我可以在它上面执行数学函数。但首先,我想将其输出为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

2 个答案:

答案 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*