strtok 段错误的问题。
#include <stdio.h>
#include <string.h>
void split(char **arr, char *str, const char *del){
char *token;
token = strtok(str, del);
while(token != NULL)
{
*arr++ = token;
token = strtok(NULL, del);
}
}
int main(){
char str[] = “10,20,30″; //如果写成 *str=”10,20,30″ 报错
char *arr[3];
const char *del = “,”;
int i=0;
split(arr, str, del);
while(i<3)
printf(“%s\n”, *(arr+i++));
}
#include <stdio.h>#include <string.h>
void split(char **arr, char *str, const char *del){ char *token; token = strtok(str, del); while(token != NULL) { *arr++ = token; token = strtok(NULL, del); }}
int main(){ char str[] = “10,20,30″; char *arr[3]; const char *del = “,”; int i=0; split(arr, str, del); while(i<3) printf(“%s\n”, *(arr+i++));
}
引用这里的文章
http://blog.csdn.net/tsd3698/archive/2007/06/06/1640077.aspx
此函数用于词法单元分析:
char *strtok(char *str1, const char *str2);
返回指向str1中的下一个词法单元的指针,str2是词法单元的间隔符的集合。
注意str1不能用字符串常量,必须使用字符串数组,这是该函数不够完善的一个地方。
示例:
#include <string.h>
#include <stdio.h>
char string[] = “A string\tof ,,tokens\nand some more tokens”; //如果用char *string=”A string\tof ,,tokens\nand some more tokens”,则被分析的字符串是一个字符常量
char seps[] = ” ,\t\n”;
char *token;
int main( void )
{
printf( “Tokens:\n” );
// Establish string and get the first token:
token = strtok( string, seps );
while( token != NULL )
{
// While there are tokens in “string”
printf( ” %s\n”, token );
// Get next token:
token = strtok( NULL, seps );
}
}
原因在于,执行此函数时,它在每个token的后面添加了一个NULL字符,改变了原有的字符串,而常量字符串是不允许被修改的。