[我正在尝试编写一个程序,该程序首先创建一个表示图形的2D数组(请注意,图形的尺寸将作为输入给出。]]
我想将此数组初始化为0,在对其进行谷歌搜索之后,我发现必须使用memset()进行操作,因为该数组的内存将从输入文件中动态分配。
到目前为止,这是我程序的一小部分:
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; }
当我使用gcc -Wconversion进行编译时,收到以下警告:
警告:从“长整数”转换为“长无符号整数”结果的符号[-Wsign-conversion] memset(graph,0,N * N * sizeof(long int));
我不知道编译器在代码的哪一点试图将long int转换为无符号int。我进行了搜索,人们只有在混合了不同类型的变量时才遇到相同的问题。
任何帮助将不胜感激!
-编辑---
[help of 'Vlad from Moscow'我能够解决以上警告(我必须将N更改为size_t类型才能正确调用memset()),但是现在我想将另一个long int数组初始化为LONG_MAX,我得到一个不同的:
memset(dist, LONG_MAX, N*sizeof(long int));
警告:隐式常量转换[-Woverflow]中溢出
[我正在尝试编写一个程序,该程序首先创建一个表示图形的2D数组(请注意,图形的尺寸将作为输入给出)。我想将此数组初始化为0,然后...
函数memset
需要类型为size_t
的第三个参数。因此,将变量N声明为