QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 763|回复: 9

菜鸟做的小小命令。表打我哈。

[复制链接]
发表于 2004-3-7 23:03:36 | 显示全部楼层 |阅读模式
[code:1]
#include <stdio.h>
#include <string.h>

int *strcmp(const char *s1, const char *s2);

int main(int argc, char *argv[])
{
  char *CommandHelpLong="--help";
  char *CommandHelpShort="-h";
  char * CheckHelpLong;
  char *CheckHelpShort;
  int *HelpCompareLong;
  int *HelpCompareShort;

  char *CommandOpen="--open";
  char *CheckOpen;
  int *OpenCompare;

  char *CommandClose="--close";
  char *CheckClose;
  int *CloseCompare;
  
  

  CheckClose = argv[1];

  CheckOpen = argv[1];

  CheckHelpShort = argv[1];
  CheckHelpLong = argv[1];

  if ((CheckHelpLong != NULL) ||
      (CheckHelpShort != NULL)  ||
      (CheckOpen !=NULL) ||
      (CheckClose !=NULL))
    {
      if(((HelpCompareLong = strcmp(CheckHelpLong, CommandHelpLong)) == 0)
        ||
        ((HelpCompareShort = strcmp(CheckHelpShort, CommandHelpShort)) == 0))
        printf("%s\n%s\n%s\n%s\n%s\n%s\n",
               "Com version 1.0.01 by lluct ([email protected])",
               "使用:",
               "com -h  --help             --帮助",
               "com --open                 --打开光驱",
               "com --close                --关闭光驱",
               "--open和--close参数都已经加上了&参数,所以不同再加. ");
      
      else if ((OpenCompare = strcmp(CheckOpen, CommandOpen)) == 0)
        system("eject -r&");
      
      else if ((CloseCompare = strcmp(CheckClose, CommandClose)) == 0)
        system("eject -t&");
      
      else
        printf("com: %s: 非法参数!!请键入参数--help查看帮助.\n", argv[1]);                                                      
    }
  else
    printf("请键入参数--help查看帮助!\n");
  
  
  return 0;
}
[/code:1]
  
发表于 2004-3-7 23:16:41 | 显示全部楼层
你还是没有注意我说的:
[code:1]
int *strcmp(const char *s1, const char *s2);
[/code:1]
这行删去
回复

使用道具 举报

发表于 2004-3-7 23:22:48 | 显示全部楼层
变量过多
变量名过于繁杂(个人感觉)
偶只说缺点了阿~
回复

使用道具 举报

 楼主| 发表于 2004-3-7 23:40:57 | 显示全部楼层
[quote:ddd28355e4="默难"]变量过多
变量名过于繁杂(个人感觉)
偶只说缺点了阿~[/quote]
不是我不想删除那个定义阿。是一删除,编译就会出错。
至于变量名,个人感觉好记阿。要不,写到后面都不知道有什么功能了。
回复

使用道具 举报

发表于 2004-3-7 23:43:56 | 显示全部楼层
如果你写着写着,发现不知道这个变量是干什么的了,说明你这个变量的作用域太长了
回复

使用道具 举报

 楼主| 发表于 2004-3-7 23:45:31 | 显示全部楼层
一删那定义,编译就出现:
[lluct@192 study]$ gcc com.c -o com
com.c: In function `main':
com.c:37: warning: assignment makes pointer from integer without a cast
com.c:39: warning: assignment makes pointer from integer without a cast
com.c:48: warning: assignment makes pointer from integer without a cast
com.c:51: warning: assignment makes pointer from integer without a cast
回复

使用道具 举报

发表于 2004-3-7 23:56:39 | 显示全部楼层
[code:1]
int *CloseCompare;
[/code:1]
[code:1]
else if ((CloseCompare = strcmp(CheckClose, CommandClose)) == 0)
[/code:1]
这个是什么………………

CloseCompare是个int *类型变量,可是strcmp返回值是一个int类型……理所当然会有warning啦……如果以后再用ColseCompare那就Segment Failed了~

而且很不解:你为什么把strcmp的返回值赋给一个变量后再比较,而这个变量以后就再也没用了……

你看一下:
man strcmp:

       int strcmp(const char *s1, const char *s2);


注意:
int strcmp(const char *s1, const char *s2);
回复

使用道具 举报

发表于 2004-3-7 23:59:42 | 显示全部楼层
另外,你为什么所有的变量都是指针?????
回复

使用道具 举报

 楼主| 发表于 2004-3-8 00:17:42 | 显示全部楼层
又打击我。实话说了。不用指针,老是有“段错误”的提示。唉~~。
谢谢了。关于那个“strcmp“
[code:1]
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char *CommandHelpLong="--help";
  char *CommandHelpShort="-h";
  char * CheckHelpLong;
  char *CheckHelpShort;
  int *HelpCompareLong;
  int *HelpCompareShort;

  char *CommandOpen="--open";
  char *CheckOpen;
  int *OpenCompare;

  char *CommandClose="--close";
  char *CheckClose;
  int *CloseCompare;
  
  

  CheckClose = argv[1];

  CheckOpen = argv[1];

  CheckHelpShort = argv[1];
  CheckHelpLong = argv[1];

  if ((CheckHelpLong != NULL) ||
      (CheckHelpShort != NULL)  ||
      (CheckOpen !=NULL) ||
      (CheckClose !=NULL))
    {
      if(((strcmp(CheckHelpLong, CommandHelpLong)) == 0)
        ||
        ((strcmp(CheckHelpShort, CommandHelpShort)) == 0))
        printf("%s\n%s\n%s\n%s\n%s\n%s\n",
               "Com version 1.0.01 by lluct ([email protected])",
               "使用:",
               "com -h  --help             --帮助",
               "com --open                 --打开光驱",
               "com --close                --关闭光驱"
               "--open和--close参数都已经加上了&参数,所以不同再加. ");
      
      else if ((strcmp(CheckOpen, CommandOpen)) == 0)
        system("eject -r&");
      
      else if ((strcmp(CheckClose, CommandClose)) == 0)
        system("eject -t&");
      
      else
        printf("com: %s: 非法参数!!请键入参数--help查看帮助.\n", argv[1]);                                                      
    }
  else
    printf("请键入参数--help查看帮助!\n");
  
  
  return 0;
}
[/code:1]
回复

使用道具 举报

发表于 2004-3-11 21:46:00 | 显示全部楼层
int *OpenCompare;
int *CloseCompare;
这两个变量是干什么的??
另外你需要明确:

指针究竟是什么,它有什么好处,什么时候需要用指针,什么时候不需要指针。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 20:30 , Processed in 0.045463 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表