无法在c中初始化数组|警告:从long转换为long unsigned undefined

问题描述 投票:0回答:1

[我正在尝试编写一个程序,该程序首先创建一个表示图形的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,然后...

c arrays initialization overflow memset
1个回答
1
投票

函数memset需要类型为size_t的第三个参数。因此,将变量N声明为

© www.soinside.com 2019 - 2024. All rights reserved.