问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-28 12:16

我来回答

2个回答

热心网友 时间:2023-10-09 00:52

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; 这是一个指针数组 这里面存放的是 一个字符串的首地址!
指针是用来存放 变量的地址的!
变量是用来存放数值的!

热心网友 时间:2023-10-09 00:52

s1的类型不对,它是数组名不是一个指针,改成*s1就行了。

热心网友 时间:2023-10-09 00:52

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; 这是一个指针数组 这里面存放的是 一个字符串的首地址!
指针是用来存放 变量的地址的!
变量是用来存放数值的!

热心网友 时间:2023-10-09 00:52

s1的类型不对,它是数组名不是一个指针,改成*s1就行了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
瑞安皇都大厦几个电梯 办签证和护照的具体步骤和一共的费用!我需要详细一点的答案. 办护照流程 办护照的流程是什么 哪位推荐几部韩剧啊!!要像豪杰春香,魔女幼熙这样的,剧情要感人,最好是... 小阴唇内应该是光滑的吗,阴道口痒为什么 阴道口有像草莓样正常吗 任氏族谱字辈:世秉忠贞 永达明玉起 国正天元律迎祖大继昌 河南夏氏家谱辈分我是永城市酂城镇夏氏夏世界具家谱记载洪武二年始祖良... 夏侯姓字辈排行 夏氏辈行,我爷爷明字辈,我父亲应字辈,我是崇字辈,后面是什么辈? C语言中用到了strtok函数,为什么第一个参数实参只能传入数组,而不能是char * c语言关于strtok的运用错误 C语言。运用strtok函数使字符串倒叙输出的。程序应该没问题。不理解写的reverse函数啥意思。可以解释下吗 C语言中strtok与strpbrk的区别,有没有详细点的 C语言strtok_s中分隔符为中文或者字符串的时候怎么使用? c语言 strtok请教 C语言strtok函数分割含有空值的字符串 如何用C语言写自己的strtok函数 c的strtok用法,result = strtok( NULL, delims )理解不了啊 C语言strtok函数能过滤换行符或者回车符吗 strtok的使用 C语言中strtok用法 关于c语言字符串中切割函数strtok的用法 什么树喜阴不怕水 既不怕雨水淹又不怕干旱的树 家里在农村闲置一块地种什么树值钱? 什么水果树不怕水淹 什么果树不怕水淹 柳树为什么不怕水淹? 什么果树不怕水淹? C语言从右到左strtok解析字符串 C语言字符串使用strtok函数分割之后,字符串在内存中位置是否有改变 C语言中使用strtok函数分割中文字符串的过程中出现问号 养老保险交不满15年怎么办 员工到了退休年龄,但社保还未缴满15年,该怎么办? 灵活就业人员,已到退休年龄,但养老保险还不满15年,怎么办? 退休时养老保险缴费不足十五年,应该怎么办? 到退休年龄养老保险未缴满15年,该怎么办? 养老保险到退休年龄交不够15年怎么办 职工养老保险到退休时未缴满面15年,怎么办? 我到60周岁时,养老保险未缴满15年,应该怎么处理? 满60岁了,但是养老保险没有缴满15年,怎么办? 养老保险没有交满15年可以退回个人账户部分吗? 到了退休年龄社保不满15年怎么办? 到退休年龄未交满15年怎么办 养老保险缴纳不够15年怎么办 养老保险金交的不够15年怎么办 熔炉是什么意思 熔炉的意思是什么 0行和0磅一样吗- 问一问