gpt4 book ai didi

c - optarg 始终返回 null

转载 作者:行者123 更新时间:2023-11-30 15:44:39 25 4
gpt4 key购买 nike

尝试使以下 C 代码工作,但每次我给它一个文件以返回它的大小时,都会说文件名为空。

我尝试过的示例命令行:

问题7 -h -t -f 问题8.c

无论如何,它返回 optarg 为 null。我不确定为什么会发生这种情况。

#include <stdio.h>
#include <getopt.h>
#include <sys/utsname.h>
#include <time.h>
#include <sys/stat.h>

int main(int argc, char **argv){
char c;
struct utsname uname_pointer;
time_t time_raw_format;
struct stat s;

int hflag = 0;
int tflag = 0;
int fflag = 0;
char *fvalue = NULL;
int index;
int check;

opterr = 0;

while ((check = getopt (argc, argv, "htf:")) != -1){
switch (check) {
case 'h':
hflag = 1;
break;
case 't':
tflag = 1;
break;
case 'f':
fflag = 1;

break;
}
}
if (hflag ==1 ) {
uname (&uname_pointer);
printf("Hostname = %s \n", uname_pointer.nodename);
}

if (tflag ==1 ){
time (&time_raw_format);
printf("the current local time: %s", ctime(&time_raw_format));
}

if (fflag == 1){
if (stat(optarg, &s) == 0){
printf("size of file '%s' is %d bytes\n", optarg, (int) s.st_size);
}else {
printf("file '%s' not found\n", optarg);
}
}
}

最佳答案

当你得到-f(或'f')时,那就是你读取optarg的时候:

char *fname = 0;

case 'f':
fname = optarg;
break;

等等。 optarg 每次都会重新清零,因此当 getopt() 失败并且退出循环时,它会再次为 NULL。一般来说,您可以有许多采用选项值的选项,并且单个全局变量无法一次存储所有选项。

#include <stdio.h>
#include <getopt.h>
#include <sys/utsname.h>
#include <time.h>
#include <sys/stat.h>

int main(int argc, char * *argv)
{
char *fname = NULL;
int check;
int hflag = 0;
int tflag = 0;

opterr = 0;

while ((check = getopt(argc, argv, "htf:")) != -1)
{
switch (check)
{
case 'h':
hflag = 1;
break;
case 't':
tflag = 1;
break;
case 'f':
fname = optarg;
break;
}
}

if (hflag == 1)
{
struct utsname uname_pointer;
uname(&uname_pointer);
printf("Hostname = %s \n", uname_pointer.nodename);
}

if (tflag == 1)
{
time_t time_raw_format;
time(&time_raw_format);
printf("the current local time: %s", ctime(&time_raw_format));
}

if (fname != NULL)
{
struct stat s;
if (stat(fname, &s) == 0)
printf("size of file '%s' is %d bytes\n", fname, (int) s.st_size);
else
printf("file '%s' not found\n", fname);
}
return 0;
}

关于c - optarg 始终返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372432/

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