Я пытаюсь сделать это:
int matrix[][] = argv[2]
Это не работает,
, потому что это неверно из-за пропущенного ';' :
- необходимо указать хотя бы второе измерение, поэтому у вас есть ошибка тип массива имеет неполный тип элемента 'int []'
- matrix является (неправильно определенным) 2D-массивом int , но в лучшем случае argv [2] является массивом char:
- , если программа вызывается без аргумента argv [2] не определено
- , если программа вызывается с одним аргументом argv [2] имеет значение NULL
- если программа вызывается как минимум с двумя аргументами argv [2] - строка, содержащая второй аргумент
С учетом argv [2] - это путь к файлу, содержащему матрицу 5x5, декларация матрицы может быть:
int matrix[5][5];
, и вам нужно прочитать значения в файле, чтобы установить содержимое матрицы, вы невозможно напрямую сопоставить текстовый файл с matrix
Пример:
#include <stdio.h>
int main(int argc, char ** argv)
{
FILE * fp;
if (argc < 3) {
fprintf(stderr, "usage: %s ?? <file>\n", *argv);
return -1;
}
else if ((fp = fopen(argv[2], "r")) == NULL) {
perror("cannot open file");
return -1;
}
else {
int matrix[5][5];
int i, j;
for (i = 0; i != 5; ++i) {
for (j = 0; j != 5; ++j) {
if (fscanf(fp, "%d", &matrix[i][j]) != 1) {
fprintf(stderr, "invalid file for [%d][%d]\n", i, j);
return -1;
}
}
}
fclose(fp);
/* debug */
for (i = 0; i != 5; ++i) {
for (j = 0; j != 5; ++j)
printf("%d ", matrix[i][j]);
putchar('\n');
}
putchar('\n');
/* you can also use it as a 1D array */
for (i = 0; i != 25; ++i) {
printf("%d ", ((int *) matrix)[i]);
if (i%5 == 4)
putchar('\n');
}
return 0;
}
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -Wall a.c
pi@raspberrypi:/tmp $ cat f
0 0 0 0 0
0 1 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
pi@raspberrypi:/tmp $ ./a.out whatever f
0 0 0 0 0
0 1 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 1 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
pi@raspberrypi:/tmp $