这是我在本网站上的第一篇文章,请原谅任何格式错误。 我正在编写一个小程序来从一个文件中获取简单的信息,如大量的单词,排序等等。但是我开始只是使用getopt,因为我想使用命令行来解析我的命令。这就是我到目前为止所拥有的。
#include <stdio.h>
#include <stdlib.h>
int value = 0;
int main(int argc, char **argv) {
extern char *optarg;
extern int optind;
int c, err = 0;
int cflag = 0, sflag = 0, fflag = 0;
char *substring;
// usage from instructions in case of error
static char usage[] = "usage: mywords [-cs] [-f substring] filename";
// only f flag requires additional input
while ((c = getopt(argc, argv, "csf:")) != -1)
switch (c) {
case 'c':
cflag = 1;
break;
case 's':
sflag = 1;
break;
case 'f':
fflag = 1;
printf("Before assigning to substring\n");
substring = optarg;
printf("After\n");
break;
case '?':
err = 1;
break;
}
if (fflag = 1) {
printf("%c ", &substring);
}
}
然后在运行makefile(成功运行且没有错误)后,我会在命令行中输入这样的内容:
mywords -f test
理想情况下输出为
test
我在fflag中的printf语句是简单的测试打印,看看我是否到达那里。感谢您的帮助。
修改
它被修复了。大卫柯林斯有正确的答案。非常感谢大家
答案 0 :(得分:4)
我注意到你的代码中有三个问题。 (可能还有其他一些小问题,但是我认为解决以下问题应该可以帮助您正常运行。)
您应该使用if (fflag == 1)
代替if (fflag = 1)
。
如果要检索substring
指向的字符的值,可以使用*substring
代替&substring
。
但你可能不想这样做。见下文。
printf()
格式说明符打印字符串/字符数组时,请使用%s
说明符而不是%c
。 (%c
用于单个字符)。所以你应该
if (fflag == 1) {
printf("%s ", substring);
}
或者 - 更简单 - 只是
if (fflag) {
puts(substring)
}
因为任何非零值在C中的计算结果为true(并且在程序开始时将fflag
初始化为零)。