高手们,快来救救我这个菜鸟吧~~

mimi_mouse 2002-04-08 09:22:49
#include "stdio.h"

char getname(char *path)
{
int count=0;
// char *tp;
char *token;
char *p[30];

token=strtok(path,"/");
while(token!='\0')
{
p[count++]=token;
token=strtok('\0',"/");
}
return(p[count]);
}

main()
{
char *path="/home/user1/test";
char *filename;
filename=getname(path);
printf("%s\n",filename);
}

我是想打印出最后一个“test”
那里错了啊??干嘛老说我指针越界啊。。。。我看不出来~~~~

谢谢~~~
...全文
55 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mldnking 2002-04-09
  • 打赏
  • 举报
回复
你的意思是不是 getname是char型,尔return(p[count]);返回的是指针?
liem 2002-04-09
  • 打赏
  • 举报
回复
主要修改二处:
1。getname返回类型应该是char *
2。getname返回值应该为p[--count]
#include "stdio.h"
#include <string.h> //包括有关头文件
char * getname(char *path) //应该返回指针
{
int count=0;
// char *tp;
char *token;
char *p[30];

token=strtok(path,"/");
while(token!='\0')
{
p[count++]=token;
token=strtok('\0',"/");
}
return(p[--count]);//应该返回前一个指针
}

main()
{
char *path="/home/user1/test";
char *filename;
filename=getname(path);
printf("%s\n",filename);
}

mimi_mouse 2002-04-09
  • 打赏
  • 举报
回复
谢谢各位,问题解决了,我忘了函数要返回指针了。。

aazhi 2002-04-08
  • 打赏
  • 举报
回复
第一、包含头文件应为:
#include <stdio.h>
#include <string.h>
我不知道你怎么编译过的。
第二、getname函数的返回类型应该是char *:
你的编译器真好,告诉我是什么?
第三、char *path="/home/user1/test";
不是一个好习惯,搞不好就溢出,试试这个:
const char path[] = "/home/usr1/test";
第四、楼上的楼上说得对,应该用--count(我好像全部是抄袭战神兄的,呵呵)
第五、(总得有点自己的东东)我知道你想得到不带路径的文件名,你可以包含
#include <libgen.h>
然后使用
char *basename(char *path);
这个函数,和它对应的还有
char *dirname(char *path);
是取不带文件名的路径。
试试看。
dengwei1116 2002-04-08
  • 打赏
  • 举报
回复
#include "stdio.h"

char *getname(char *path) /*这个函数应该返回指针*/
{
int count=0;
/* char *tp; */
char token;
char *p[30];

token=strtok(path,"/");
while(token!='\0')
{
count++;
*(p+count)=token;
token=strtok('\0',"/");
}
return(*(p+count)); /*这里才是返回数组p中最后一个元素*/
}

main()
{
char pa[]="/home/aaa/user1/test";
char *path=pa;
char *filename;
clrscr();
filename=getname(path);
printf("%s\n",filename);
}
jacky_chen 2002-04-08
  • 打赏
  • 举报
回复
应该这样
你有两个错误
1,char *path="/home/user1/test";
改为 char path[128]="/home/user1/test";

2,在return(p[count]);前加一个
count--;
再试试看可不可以了
mimi_mouse 2002-04-08
  • 打赏
  • 举报
回复
token=strtok(path,"/");
while(token!='\0')
{
p[count++]=token;
token=strtok('\0',"/");
}
但是这一段程序我以前用过的,调试过没有问题的~~
mn_th 2002-04-08
  • 打赏
  • 举报
回复
token是个指针,
strtok的返回值是个什么,如果是指针,那么不能付给token,
另外while(token!='\0')中的token是指针,所以这句应为while(*token!='\0')

mimi_mouse 2002-04-08
  • 打赏
  • 举报
回复
函数名: strtok
功 能: 查找由在第二个串中指定的分界符分隔开的单词
用 法: char *strtok(char *str1, char *str2);
程序例:

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

int main(void)
{
char input[16] = "abc,d";
char *p;

/* strtok places a NULL terminator
in front of the token, if found */
p = strtok(input, ",");
if (p) printf("%s\n", p);

/* A second call to strtok using a NULL
as the first parameter returns a pointer
to the character following the token */
p = strtok(NULL, ",");
if (p) printf("%s\n", p);
return 0;
}


dengwei1116 2002-04-08
  • 打赏
  • 举报
回复
strtok()是什么函数,我没用过
mimi_mouse 2002-04-08
  • 打赏
  • 举报
回复
怎么没人回我啊??

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧