C语言,strtok函数求大神解释下原因,下面有代码以及问题?

#include<stdio.h>#include<string.h>#include<stdlib.h>/*intmain(){chars[]="123456",*ch... #include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*int main()
{
char s[]="12 34 56",*ch;
ch=strtok(s," ");
while(ch!=NULL)
{
printf("s=%s\n",s);
printf("ch=%s\n",ch);
ch=strtok(NULL," ");
}
return 0;
}*/
int main()
{
char s[]="12 34 56",s1[9];//为什么strtok函数这么用不对?求大神讲原因!我不只是要结果!
s1=strtok(s," ");
while(s1!=NULL)
{
puts(s);
puts(s1);
s1=strtok(NULL," ");

}
return 0;
}
展开
 我来答
无风的麦田
2015-02-19 · 超过21用户采纳过TA的回答
知道答主
回答量:140
采纳率:0%
帮助的人:49.6万
展开全部
char s[]="12 34 56",s1[9];//为什么strtok函数这么用不对?求大神讲原因!我不只是要结果!

你这一行错了。现在关键的问题不是这个字符串函数"strtok();"的用法和作用。而是你对怎样
“声明数组元素”的规则有误解,看看书上数组这一章 ,正常程序应该怎样去 声明一个“数组变量或字符串数组或N维数组”!
你上面 这个地方"s1[9]" 这里不能这样声明数组!
这问题书上写的很明白!
不明白抄下来再问,.
追问
求赐代码改错!不甚感激
追答
int main()
{
char s[]="12 34 56";
char *s1;
s1=strtok(s," ");
while(s1!=NULL)
{
puts(s1);
s1=strtok(NULL," ");

}
getch();
return 0;
}
/*----------------------*/
这样的是对的
分隔字符串 char *strtok(char s[], const char *delim); 这是分割函数的原型。
这个函数的用法。第一个参数 char s[] 这是要分割的源字符串, 第二个参数 char *delim 确定以什么符号为分隔符,在函数执行当中当在 char s[] 这个制定的参数中遇到 第二个制定的参数 *delim 指定的字符时,将第一个参数字符串中的对应的字符(第二个参数指定的)替换成 “\0” 这是字符串结束字符
第一次使用的时候要必须要指定 源字符串(char s[] 这个参数),后面每次使用指定源字符串为NULL就行,但是 第二个参数不能省略,因为他要在源字符串中匹配寻找 第二个参数!
然后替换,每替换成功一次就返回一个字符串首地址(这个地址你不能放在普通变量里面,要放在指针变量里才能访问这个地址中的字符串)

关于你上面的问题:
char s[]="12 34 56",s1[9];//为什么strtok函数这么用不对?求大神讲原因!我不只是要结果!

这里 s1[9]为什么错, 语法上没错。但是你这个s1是用来保存 这个函数 char *strtok(char s[], const char *delim); 的返回值的!
这个返回值是一个地址! 地址!地址!
为什么是地址? 因为这个地址是一串字符串的首地址! 而你要使用这个字符串 必须通过他的首地址来访问 当遇到 "\0" 时 这个字符串就结束了!
这个函数返回的是分割后的字符串的首地址! 所以要用指针型变量来存放这个地址,这样你在后面的输出函数 如:printf("%s\n",); puts(); 这些字符串输出函数 当遇到 “\0” 时 字符串就结束了
明白否?
你之前声明了一个 s1[9] 这个是字符串数组 是变量! 每一个元素中存放的是一个字符!
而char *s1; 这是一个指针数组 这里面存放的是 一个字符串的首地址!
指针是用来存放 变量的地址的!
变量是用来存放数值的!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2015-02-19 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:810万
展开全部
s1的类型不对,它是数组名不是一个指针,改成*s1就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式