如何停止给定看似随机的特定值的初始化整数?

Tay*_*att 2 c int

我已经在这个项目上工作了一天左右,我没有遇到任何问题,也没有看过之前的特定问题.

它工作之前它没有工作......下面是导致问题的代码.

当我将变量iflag,vflag和nflag声明为零时,我在今天开始工作之前获得了可预测的功能.但现在iflag不知何故是4196496.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#define MAX_LINE_LENGTH 512

//Prototypes:
char *read_line(FILE *fpntr);
int grep_stream(FILE *fpntr, char *string, int iflag, int nflag, int vflag);

int line_number = 1;             // Line number in the file.
int width = 6;                   // Spacing

int main(int argc, char *argv[])
{   
    FILE *fpntr = NULL;              // Pointer
    char *PATTERN = argv[1];         // String we are attempting to match with our search.
    char *FILE_PATH = NULL;          // Optional file pathway.
    int eflag = 0;                   // Track errors
    int vflag, iflag, nflag = 0;     // Track param usage.

    printf("Inside the grep_stream \n");
    printf("iflag: %d\n", iflag);    // Outputs 4196496
    printf("nflag: %d\n", nflag);    // Outputs 0
    printf("vflag: %d\n\n", vflag);  // Outputs 0
...
}
Run Code Online (Sandbox Code Playgroud)

我可以包括其余的代码,如果这会有所帮助,但基本上我做声明的那一刻它设置为奇怪的数字所以我不认为在其他地方可能有任何问题导致问题.

有没有办法阻止这种情况发生?

Bri*_*ain 5

有没有办法阻止这种情况发生?

这很不幸,但没有.您有责任对其进行初始化.没有标准的C功能,你可以利用它来为你初始化它.

当我将变量iflag,vflag和nflag声明为零时,我在今天开始工作之前获得了可预测的功能.但现在iflag不知何故是4196496.

这段代码:

int vflag, iflag, nflag = 0;     // Track param usage.
Run Code Online (Sandbox Code Playgroud)

相当于这段代码:

int vflag;
int iflag;
int nflag = 0;     // Track param usage.
Run Code Online (Sandbox Code Playgroud)

注意到iflag并且vflag未在此处初始化是至关重要的.


我将来如何避免这个问题?

在我看来,警告和其他静态分析方法对于C/C++的生产力至关重要.

$ clang -Wall -Wno-unused-variable uninit.c 
uninit.c:25:27: warning: variable 'iflag' is uninitialized when used here [-Wuninitialized]
    printf("iflag: %d\n", iflag);    // Outputs 4196496
                          ^~~~~
uninit.c:22:21: note: initialize the variable 'iflag' to silence this warning
    int vflag, iflag, nflag = 0;     // Track param usage.
                    ^
                     = 0
uninit.c:27:29: warning: variable 'vflag' is uninitialized when used here [-Wuninitialized]
    printf("vflag: %d\n\n", vflag);  // Outputs 0
                            ^~~~~
uninit.c:22:14: note: initialize the variable 'vflag' to silence this warning
    int vflag, iflag, nflag = 0;     // Track param usage.
             ^
              = 0
2 warnings generated.
Run Code Online (Sandbox Code Playgroud)

下面是一个示例,在您浪费时间调试之前,编译器可以向您发出有关这些错误的警告.请注意,我审查了unused-variable警告,但仅仅是因为您的示例代码省略了一些用法.通常,这可能是一个有用的警告.