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;
} 展开
#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;
} 展开
2个回答
展开全部
char s[]="12 34 56",s1[9];//为什么strtok函数这么用不对?求大神讲原因!我不只是要结果!
你这一行错了。现在关键的问题不是这个字符串函数"strtok();"的用法和作用。而是你对怎样
“声明数组元素”的规则有误解,看看书上数组这一章 ,正常程序应该怎样去 声明一个“数组变量或字符串数组或N维数组”!
你上面 这个地方"s1[9]" 这里不能这样声明数组!
这问题书上写的很明白!
不明白抄下来再问,.
你这一行错了。现在关键的问题不是这个字符串函数"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; 这是一个指针数组 这里面存放的是 一个字符串的首地址!
指针是用来存放 变量的地址的!
变量是用来存放数值的!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询