C 为什么我的int值非常大?
我将尝试在代码片段中提供足够的信息,因为其中大部分与问题无关。如果您需要更多代码,请告诉我 我试图从一个txt文件读取使用fscanf,以便使一个矩阵。文件格式如下: (声明行数的整数) (声明列数的整数) (值1,值2,…,值n) (最后一行值) 我使用以下代码(剔除不相关项)获得矩阵中的行数和列数:C 为什么我的int值非常大?,c,integer,C,Integer,我将尝试在代码片段中提供足够的信息,因为其中大部分与问题无关。如果您需要更多代码,请告诉我 我试图从一个txt文件读取使用fscanf,以便使一个矩阵。文件格式如下: (声明行数的整数) (声明列数的整数) (值1,值2,…,值n) (最后一行值) 我使用以下代码(剔除不相关项)获得矩阵中的行数和列数: FILE* fp; int row,col; row = (int) malloc(sizeof(int)); col = (int) malloc(sizeof(int));
FILE* fp;
int row,col;
row = (int) malloc(sizeof(int));
col = (int) malloc(sizeof(int));
fp = fopen(fname, "r");
fscanf(fp, "%d %d", row, col);
printf("%d %d \n", row, col);
打印出来的值各不相同,但总是非常大,即“59770725977088”或“4797424797440”。我对C比较陌生,很想知道为什么会发生这种情况。我的两个假设如下:
如果是场景1,那么我在设置行和列的值时做错了什么?是否应该在某个点操作指针?您未能将
行
和列
声明为指向整数的指针
你的声明应该是
int *row, *col;
因此,您只是在生成随机垃圾数据
更新:指针是C语言的一个重要方面。指针最简单的定义是它指向内存区域
当您使用malloc(n)
时,它会发现一个不间断的未使用内存区域,其大小为n
字节。因此,由于使用了malloc
,因此必须将结果存储在指针中
指针对于返回多个值也很有用,可以将scanf
等函数的指针传递给用户希望用返回值填充的内存区域。这就是为什么要这样使用scanf
:
int row, col;
scanf("%d %d", &row, &col);
或者,您也可以像在问题中那样在堆上进行分配:
int *row = malloc(sizeof(int));
int *col = malloc(sizeof(int));
scanf("%d %d", row, col);
这两种方式都是完全合法的。虽然,对于像
int
这样恰好小于int*
的数据类型(在大多数系统上,在其他系统上,它的大小可以相同),后者是不受欢迎的。您没有将行
和列
声明为指向整数的指针
你的声明应该是
int *row, *col;
因此,您只是在生成随机垃圾数据
更新:指针是C语言的一个重要方面。指针最简单的定义是它指向内存区域
当您使用malloc(n)
时,它会发现一个不间断的未使用内存区域,其大小为n
字节。因此,由于使用了malloc
,因此必须将结果存储在指针中
指针对于返回多个值也很有用,可以将scanf
等函数的指针传递给用户希望用返回值填充的内存区域。这就是为什么要这样使用scanf
:
int row, col;
scanf("%d %d", &row, &col);
或者,您也可以像在问题中那样在堆上进行分配:
int *row = malloc(sizeof(int));
int *col = malloc(sizeof(int));
scanf("%d %d", row, col);
这两种方式都是完全合法的。尽管对于像
int
这样的数据类型,它恰好小于int*
(在大多数系统上,在其他系统上,它的大小可以相同),后者是不受欢迎的。请使用所有警告和调试信息进行编译(例如gcc-Wall-g
),并学习如何使用调试器(例如gdb
)。为什么要从堆中为行
和列
分配内存?因为否则我的程序会崩溃。当它尝试扫描时,我相信它没有地方放置值,因此它会崩溃。请使用所有警告和调试信息(例如gcc-Wall-g
)进行编译,并学习如何使用调试器(例如gdb
)。为什么要从堆中为行
和列
分配内存?因为否则我的程序会崩溃。当它尝试扫描时,我相信它没有任何地方可以放置值,因此它会崩溃。是否有一些阅读资料可以帮助我更好地理解这一点?老实说,我只是不知道什么时候应该声明为指针。@ChristianBaker查看我的更新,以获取有关指针使用的小指南。对于更高级的用法,最好的学习方法是查看主要库(如zlib)的头文件。是否有一些阅读资料可以帮助我更好地理解这一点?老实说,我只是不知道什么时候应该声明为指针。@ChristianBaker查看我的更新,以获取有关指针使用的小指南。对于更高级的用法,最好的学习方法是查看zlib等主要库的头文件。