QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 785|回复: 5

紧急求教c程序

[复制链接]
发表于 2004-6-16 13:55:18 | 显示全部楼层 |阅读模式
我想在主函数通过比较输入字符来调用tm();但不成功。
可是在分析字符函数Get_simarg()里调用,就能有结果。
。如果在Get_simarg()里加上printf("%d\n",strcmp(avptr[0],"tm"));  /*1*/
这么一句,那么主函数就能正常调用tm();请大家指点。
字符分析是用来分析空格的,把一个命令行分解成独立的字符串

#include <stdio.h>
#include <string.h>

char *avptr[25];

int tm(void)
{
        printf("This is TM\n");
        return 1;
}


int Get_simarg(void)
{
char inputln[255];//={"abc def|gh"};    //存放输入的命令行
int s;
char *pc;
int i,j;
int k=0;

printf(">>");
fgets(inputln,255,stdin);//自动加上NULL
if((pc=strchr(inputln,'\n'))!=NULL)
         *pc='\0';
s=strlen(inputln);
avptr[k++]=inputln;
         for(i=0;i<s;i++)
         {
                    if(!isspace(inputln))
                            continue;
                    else{

                            inputln='\0';
                            while(1){
                               if(isspace(inputln[i++])){
                                      inputln='\0';
                                       continue;
                                      }
                               else{
                                       avptr[k++]=&inputln;
                                       break;
                               }
                            }
                    }
                  }
//      printf("在函数里%d\n",strcmp(avptr[0],"tm"));  /*1*/
        if (strcmp(avptr[0],"tm")==0)
        {
        tm();
        }

}

/*主过程*/
main()
{
        Get_simarg();
//      if(strcmp(avptr[0],"tm")==0)    /*2*/
//   {
//              tm();

//        }

}
发表于 2004-6-16 14:37:48 | 显示全部楼层
去掉main中的所有注释得

>>tm
This is TM
This is TM
哪儿有问题?
回复

使用道具 举报

发表于 2004-6-16 14:43:10 | 显示全部楼层
是这里有问题:
[code:1]    strcmp(avptr[0],"tm");[/code:1]
应该使用[code:1]    strcmp(&avptr[0],"tm");
或者
    strcmp(avptr,"tm");
[/code:1]
strcmp(avptr[0],"tm");这个avptr[0]本来是要传递一个指针的
你还好, 给它一个字符, 而strcmp却认为avptr[0]是个指针
所以strcmp很有可能访问的不是自己的内存空间了
不过还好strcmp不往那个地址写东西, 要是用个strcpy就是段错误了.
回复

使用道具 举报

 楼主| 发表于 2004-6-16 17:16:21 | 显示全部楼层
sunmoon
谢谢你的解答,我和你的想法一样的,但strcmp(avptr,"tm")在这程序是不能用的(我要比较的是这个指针数组的元素、不是整个指针数组), strcmp(&avptr[0],"tm");
实行不通的。出错如下:
line.c: In function `main':
line.c:58: warning: passing arg 1 of `strcmp' from incompatible pointer type

我现在的办法是在把*avptr[]定义的位置改一下。
int Get_simarg(char *avptr[25])
{
。。。。。
}
这样就不出问题,但原因我还没想到。
回复

使用道具 举报

发表于 2004-6-17 11:18:30 | 显示全部楼层

Re: 紧急求教c程序

实际上根本就不用定义这个char *avptr[25]这个指针数组; 只要定义一个char *avptr就行了。在程序中只用了avptr[0]这个指针。

“avptr[k++]=inputln;”已经将指针avptr[0]指向了数组inputln。后面for循环里的一大堆东西做了些什么?看了看,好像什么都没有做。而且由于这句话,就可以对avptr[0]进行strcpy操作了(相当于对指针avptr进行了malloc)。

不得不说这个程序比较烂,不懂为什么要定义一个指针数组,而且for循环中不知道要是实现什么东西,弄得我头晕。
回复

使用道具 举报

发表于 2004-6-17 18:19:56 | 显示全部楼层
不得不说这个程序比较烂,不懂为什么要定义一个指针数组,而且for循环中不知道要是实现什么东西,弄得我头晕。
那么我就不看了!
慢慢摸索!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-8 03:17 , Processed in 0.049139 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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