gpt4 book ai didi

c - 如何停止为初始化的整数赋予看似随机的特定值?

转载 作者:行者123 更新时间:2023-12-02 09:01:01 27 4
gpt4 key购买 nike

我已经在这个程序上工作了一天左右,我没有遇到任何问题,以前也没有见过这个特定问题。

在不起作用之前它可以工作...下面是导致问题的代码。

当我将变量 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
...
}

如果有帮助的话,我可以包含其余的代码,但基本上在我声明的那一刻,它就被设置为那个奇怪的数字,所以我认为其他地方不会有任何奇怪的东西导致问题。

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

最佳答案

Is there a way to stop that from happening?

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

When I declare my variables iflag, vflag, and nflag to be zero I got predictable functionality prior to starting work today. But now iflag is somehow 4196496.

这段代码:

int vflag, iflag, nflag = 0;     // Track param usage.

相当于这段代码:

int vflag;
int iflag;
int nflag = 0; // Track param usage.

需要注意的是,iflagvflag 并未在此处初始化。

<小时/>

将来如何避免这个问题?

在我看来,警告和其他静态分析方法对于 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.

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

关于c - 如何停止为初始化的整数赋予看似随机的特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35976760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com