Отличается от char * до максимальной точности

Я читаю числа из файла. Когда я пытаюсь поместить каждое число в двумерный массив, он дает мне ошибку ниже. Как мне избавиться от этого сообщения? Мои переменные:    FILE * fp;     char строка [80];

Ошибка: передача из char * в int теряет точность

Код: -

#include<stdio.h>
#include<string.h>

int main()
{
        FILE *fp;
        char line[80],*pch;
        int points[1000][10];
        int centroid[1000][10];
        float distance[1000][10];
        int noofpts=0,noofvar=0,noofcentroids=0;
        int i=0,j=0,k;

        fp=fopen("kmeans.dat","r");
        while(fgets(line,80,fp)!=NULL)
        {
                j=0;
                pch=strtok(line,",");
                while(pch!=NULL)
                {
                        points[i][j]=(int)pch;
                        pch=strtok(NULL,",");
                        noofvar++;
                        j++;
                }
                noofpts++;
                i++;
        }
        noofvar=noofvar/noofpts;
        printf("No of points-%d\n",noofpts);
        printf("No of variables-%d\n",noofvar);

        return 0;
}

Ответ 1

Это оскорбительная строка:

points[i][j]=(int)pch;

Вы должны заменить его на

points[i][j]=atoi(pch);

atoi - это функция, которая преобразует строку C, представляющую целое число в десятичном представлении, в int.

Ответ 2

Эта ошибка возникает при компиляции на 64 bit machine, но может не произойти в 32 bit machine, так как существует разница в размере для char* и int.

на 64 бит sizeof(char*) равно 8 и sizeof(int) равно 4

on 32 бит sizeof(char*) равно 4 и sizeof(int) равно 4