在c语言中使用strtok函数分隔字符串的c语言编程通常需要处理字符串问题,如strchr搜索、strtok函数分隔和转换函数atoi。 其中,strtok函数在使用时容易犯错误如下
voidstrsplit(char*content ) { char s[]='aa、bb、cc '; //使用数组的话剪切成功,使用指针的话失败? why? char *delim=','; char *p; char buffp[1024]; sprintf(buffp,strlen ) content ) 1,' %s ',content ); //复制并放入buff中,剪切printf(%d(n )、strcmp ) content、s ); printf (内容=% s (n ),s ); printf('%s ',strtok ) ) Buffp,delim ); while ((p=strtok null,delim ) ) ) )、p ); printf((n ); }如上所述,如果我们的s是数组,程序将正常分割完成。 但是,如果是s是一个指针,则程序会发生内存错误。
#问题,指针和数组有什么区别?
指针:指针是变量,但具体分析指向的内存区域是否可变。
这是因为指针是变量,但指针指向的值是字符串文字,存在常量区域。 例如
char *p=“aa,bb”;
char *q=“aa,bb”;
同时打印这两个地址时,将发送指向同一内容空间p=0040C101、q=0040C101的消息
因此,可以确定指针实际上指向的字符串是常量区域,不能修改。 尝试修正时,会发生如下内存错误p [0]=‘c’; //这是不允许的
数组:数组是临时申请的数组空间,可以修改内容
数组是在当前函数堆栈中打开的空间,可以直接修改数组。 例如,char s[]=“aa、bb ";==s [0]=‘c’; 那么char s[]=“ca,bb”; char *p='aa,bb '; char *q='aa,bb '; printf(p=%p,q=%p(n ),p,q ); //printf (-------- n ),如两个地址; char s[]='aa,bb '; char ss[]='aa,bb '; printf(s=%p,ss=%p(n ),s,ss ); //s和ss的地址是不同的输出结果。 因为p=0040C101,q=0040 c101---------- -,ss=0061FF1C
intsplit_str(char*data,const char* delim ) if ) data==null ) { return -1; } char buff[4096]; //snprintf(buff,strlen ) data ) 1,准备作为分隔“%s”,data )的数组接收的数组; 返回0; }