一个程序 看不太懂 请指教
- C/C++ code
/*如何实现这个算法This is a good day today -> sihT si a doog yad yadot */#include<stdio.h>#include "string.h"#include "malloc.h"char *fun(char *a);int main(int argc, char* argv[]){ char *string = "This is a good day today"; char *ll=fun(string); printf("%s \n %s",ll,string); return 0;}char *fun(char *a){ char *ptt = (char *)malloc(strlen(a)); ptt = a; char *ftt = (char *)malloc(strlen(a)); //*ftt = '\0'; ftt[0] = '\0'; char step[] = " "; char *token; token = strtok( strdup(a),step); //token = strtok( a,step); //这样会出错/*该函数将s1中首次出现s2中字符的位置置为NULL,因此会破坏s1字符串。该函数一般用于分解s1字符串为用特定分隔符分隔的多个字符串,s2一般设置为s1中的分隔字符,比如空格,逗号等,strdup 例如将一条自然英文语句分解为单词。src 待拷贝的源字符串*/ while(token != NULL) { //puts(strrev(token)); strcat(ftt,strrev(token)); /*strrev()将字符串s复制到最近建立的单元*/ strcat(ftt," "); token = strtok( NULL,step);//这句代码 看不太懂 //puts(token); } *(ftt + strlen(a)-1) = '\0'; return ftt;}[解决办法]
char *fun(char *a)
{
char *ptt = (char *)malloc(strlen(a));
ptt = a;
...
...
这两行可能会有内存泄露
[解决办法]
1. strtok函数在寻找标识符,会把'\0'取代标识符的。
所以token = strtok( a,step);报错的原因就是a指向的字符串是无法修改的,建议把字符串放在数组里。
2. strtok(NULL, step); 就是说在修改后的字符串里继续寻找下一个标识符,参考msdn里关于strtok首参数为零的说明。
3. 我猜动态空间的申请用意在于取代a来执行strtok(ptt, step)
[解决办法]
1. strtok函数在寻找标识符,会把'\0'取代标识符的。
所以token = strtok( a,step);报错的原因就是a指向的字符串是无法修改的,建议把字符串放在数组里。
2. strtok(NULL, step); 就是说在修改后的字符串里继续寻找下一个标识符,参考msdn里关于strtok首参数为零的说明。