首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

strtok 段异常的有关问题

2012-08-22 
strtok 段错误的问题。#include stdio.h#include string.hvoid split(char **arr, char *str, const ch

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字符,改变了原有的字符串,而常量字符串是不允许被修改的。

热点排行