int main(int argc, char **argv){
// If the user does not have the right amount of arguments exit the program and display message
if(!(argc >= 2)){
printf("Usage: %s -l -c -w -L <filenames>");
exit(-1);
}
size_t iscFlag = 0;
size_t islFlag = 0;
size_t iswFlag = 0;
size_t isLFlag = 0;
FILE *src;
puts("Work work");
// For loop that checks for all the flags
int i;
for(i = 1; i < 5; i++){
if(strcmp(argv[i], "-c") == 0){
iscFlag = 1;
}else if(strcmp(argv[i], "-l") == 0){
islFlag = 1;
}else if(strcmp(argv[i], "-w") == 0){
iswFlag = 1;
}else if(strcmp(argv[i], "-L") == 0){
isLFlag = 1;
}
}
我正在尝试制作一个简单的 for 循环,用于检查标志以在 UNIX 类型终端中重新创建 wc 命令。有人知道 for 循环是怎么回事吗?我得到了一个分段错误。还有更多代码,但我只是发布其中的一部分。
提前谢谢。
for(i = 1; i < 5; i++){
if(strcmp(argv[i], "-c") == 0){
应确保 argc >= 5
,否则strcmp
在i == argc
时将收到NULL
指针。
当你的i
一直上升到四个时,你正在查看argv[i]
,但你只检查一个argc >= 2
。我想当你有三四个参数时,你都会得到一个段错误,只有当你有五个或更多参数时,它才会起作用。
for(i = 1; i < 5; i++){
if(strcmp(argv[i], "-c") == 0){
iscFlag = 1;
continue;
}else if(strcmp(argv[i], "-l") == 0){
islFlag = 1;
continue;
}else if(strcmp(argv[i], "-w") == 0){
iswFlag = 1;
continue;
}else if(strcmp(argv[i], "-L") == 0){
isLFlag = 1;
continue;
}
break;
}
用它修复了它!