段错误 reading/altering 一个全局变量
Segfault reading/altering a global variable
我已经开始熟悉 getopt() 及其使用方法。现在我正在制作一个克隆猫,camt,来教自己一些东西,在它们之间设置执行标志。
我的解决方案是在 camt.h 中设置全局变量并根据我想要设置的标志更改它们。它看起来像这样:
camt.c中的代码是:
bool line_numbers = false;
int main(int argc, char *argv[]){
int opt = 0;
while((opt = getopt(argc, argv, "n")) != -1){
switch(opt){
case 'n':
line_numbers = true;
break;
default:
break;
}
}
int ch;
FILE* foofile;
int o_files = 1;
do{
//read file
foofile = fopen(argv[o_files], "r");
if(line_numbers){
display_ln(foofile); //line-numbers
}else{
display(foofile); /"normal" cat
}
fclose(foofile);
o_files++;
}while(o_files < argc);
printf("\n"); //final scape character for nice prompt
return(EXIT_SUCCESS);
}
顺便说一句,如果没有更好的、不那么可怕 的方法在程序中设置标志,我会感到很惊讶,在这种情况下,如果你告诉我的:)
请考虑到我是一个初学者,几乎无法使用 git 克隆存储库,所以请保持友善。
谢谢。
天哪,这是一个愚蠢的解决方案。我在读取我的全局变量时没有遇到问题,但是打开 文件。
问题是我将 o_files
默认为 1,这是我用来知道我正在阅读的文件的默认值。当第一个参数是文件时,这不是问题,或者我设置一个立即结束程序的标志,但是当我给出一个选项并且 运行 整个程序.
我总是默认第一个参数,就好像它是一个文件;程序正确激活了 p_flags.line_numbers
标志,然后尝试读取 -n
,参数 1,就好像它是一个文件,显然不存在。
TL;DR:差不多,我把我所有的参数都当作文件来读,然后试图打开它们,当所有参数都是文件时这不是问题,但当不是 all 时就是问题了 个是。
我已经开始熟悉 getopt() 及其使用方法。现在我正在制作一个克隆猫,camt,来教自己一些东西,在它们之间设置执行标志。
我的解决方案是在 camt.h 中设置全局变量并根据我想要设置的标志更改它们。它看起来像这样:
camt.c中的代码是:
bool line_numbers = false;
int main(int argc, char *argv[]){
int opt = 0;
while((opt = getopt(argc, argv, "n")) != -1){
switch(opt){
case 'n':
line_numbers = true;
break;
default:
break;
}
}
int ch;
FILE* foofile;
int o_files = 1;
do{
//read file
foofile = fopen(argv[o_files], "r");
if(line_numbers){
display_ln(foofile); //line-numbers
}else{
display(foofile); /"normal" cat
}
fclose(foofile);
o_files++;
}while(o_files < argc);
printf("\n"); //final scape character for nice prompt
return(EXIT_SUCCESS);
}
顺便说一句,如果没有更好的、不那么可怕 的方法在程序中设置标志,我会感到很惊讶,在这种情况下,如果你告诉我的:) 请考虑到我是一个初学者,几乎无法使用 git 克隆存储库,所以请保持友善。
谢谢。
天哪,这是一个愚蠢的解决方案。我在读取我的全局变量时没有遇到问题,但是打开 文件。
问题是我将 o_files
默认为 1,这是我用来知道我正在阅读的文件的默认值。当第一个参数是文件时,这不是问题,或者我设置一个立即结束程序的标志,但是当我给出一个选项并且 运行 整个程序.
我总是默认第一个参数,就好像它是一个文件;程序正确激活了 p_flags.line_numbers
标志,然后尝试读取 -n
,参数 1,就好像它是一个文件,显然不存在。
TL;DR:差不多,我把我所有的参数都当作文件来读,然后试图打开它们,当所有参数都是文件时这不是问题,但当不是 all 时就是问题了 个是。