c 求救啊,exit 就自动挂掉了

好为 发布于 2013/09/13 10:08
阅读 607
收藏 0

为什么我输入exit 程序就挂掉了 ?


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

struct complex_struct {
	
	static void exit(char *s) {
		if(strcmp(s, "exit")) return ;
		exit(0);
	}
	
	static void ls(char *s) {
		
		if(strcmp(s, "ls")) return ;
		
		struct _finddata_t files;
		int fhandle;
		int i = 0;
		
		fhandle = _findfirst("d:/*", &files);
		if(fhandle == -1) {
			printf("ls: cannot access /: No such file or directory\n");
			return ;
		}
		do{	
			if(!(i%3)) {
				printf("%s\n", files.name);
			}else{
				printf("%s\t", files.name);
			}
			i++;	
		}
		while(_findnext(fhandle, &files) == 0);
		printf("\n");
		_findclose(fhandle);
	}
	
	static void clear(char *s) {
		if(strcmp(s, "clear")) return ;
		system("cls");
	}
	
} command;


int main() {
	char *s;
	char *prefix = "[root@localhost /]# ";
	printf("%s", prefix);
	while(true) {
		gets(s);
		command.exit(s);
		command.ls(s);
		command.clear(s);
		printf("%s", prefix);
	}	
	return 0;
}


加载中
0
stxy0509
stxy0509

原因就在这段代码里面:

static void exit(char *s) {
09         if(strcmp(s, "exit")) return ;
10         exit(0);

11     }
自己调用自己,strcmp()函数还传入了一个空指针,所以挂掉了.

把你这个exit函数改个名字吧.

好为
好为
找到解决方案了,我用 _exit()
0
wendal
wendal
exit是系统方法....
0
中山野鬼
中山野鬼
楼主,你这种结构体里面写函数的方式,还有意思啊? 搞的一楼都需要列出指定行,才能说清楚,你的代码的具体位置。哈。
0
J
JiaKlose
你程序都exit了,你还能在外边等待return?
0
Steven_smiles
Steven_smiles
你调用exit的时候,两个比较的字符串相同,if的条件值为0,直接就exit(0)了,你怎么可以在外面等待输出你。程序到这里就已经退出了。
0
c
cfmlovers
楼主你的gets(s),把输入的字符串存到哪里了?s只是一个指针,还没指向内存呢
0
hangvo
hangvo
我有点蒙,这是C?好吧,我再去啃啃书再回来
0
改变时尚
改变时尚
exit是系统关键字吧。
返回顶部
顶部