我正在尝试这样做:
int matrix[][] = argv[2]
这行不通,
因为这是无效的,所以缺少了';' :
- 至少必须给出第二维,这就是为什么你有错误数组类型有不完整的元素类型'int []'
- matrix是一个(错误定义的)二维数组int但在最好的情况下argv[2]是一个 char 数组:
- 如果程序在没有参数的情况下被调用argv[2]是未定义的
- 如果使用一个参数调用程序argv[2]为 NULL
- 如果使用至少 2 个参数调用程序,则argv[2]是包含第二个 arg 的字符串
考虑到argv[2]是包含 5x5 矩阵的文件的路径名,矩阵的声明可以是:
int matrix[5][5];
并且您需要读取文件中的值来设置矩阵的内容,您不能直接将 txt 文件映射到矩阵
例子 :
#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 $