发布网友 发布时间:2022-04-28 12:16
共2个回答
热心网友 时间:2023-10-09 00:52
char s[]="12 34 56",s1[9];//为什么strtok函数这么用不对?求大神讲原因!我不只是要结果!追答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函数这么用不对?求大神讲原因!我不只是要结果!追答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就行了。