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

一个程序 看不太懂

2012-02-08 
一个程序 看不太懂 请指教C/C++ code/*如何实现这个算法This is a good day today - sihT si a doog yad

一个程序 看不太懂 请指教

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首参数为零的说明。

热点排行