Я пытаюсь написать программу, которая начинает с создания двумерного массива, который будет представлять график (обратите внимание, что размеры графика будут заданы в качестве входных данных).
Я хочу инициализировать этот массив в 0 и после поиска в Google я обнаружил, что вы должны сделать это с помощью memset (), потому что память для массива будет динамически выделяться из входного файла.
Ниже приведена небольшая часть моей программы, поэтому far:
long int N;
int main(int argc, char *argv[]) {
long int i;
FILE * txt;
txt = fopen(argv[1], "r");
if (txt == NULL) {
printf("There was an error trying to open the file.\n");
return 0;
}
fscanf(txt, "%li", &N);
long int graph[N][N];
memset(graph, 0, N*N*sizeof(long int));
return 1;
}
Когда я компилирую его с помощью g cc -Wconversion, я получаю следующее предупреждение:
предупреждение: преобразование в 'long unsigned int' из 'long int' может изменить знак результата [-Wsign-преобразование] memset (graph, 0, N * N * sizeof (long int));
Я не могу понять в в какой точке кода компилятор пытается преобразовать long int в unsigned. Я искал его, и у людей была та же самая проблема, только когда у них были смешанные переменные разных типов.
Любая помощь будет оценена!
--- EDIT ---
С помощью с помощью «Влада из Москвы» мне удалось решить вышеупомянутое предупреждение (мне пришлось изменить N на тип size_t, чтобы правильно вызвать memset ()), но теперь я хочу инициализировать еще один длинный массив int в LONG_MAX, и я получаю другой:
memset(dist, LONG_MAX, N*sizeof(long int));
предупреждение: переполнение при неявном преобразовании констант [-Woverflow]