rt
const char *str = "drw-rw-rw-   1 user     group           0 Oct 28  2003 -====流行音乐专用FTP=====-";
上面是源串,我要分别得到drw-rw-rw-,group,-====流行音乐专用FTP=====-字段
注意:因为这几个字段的值会变化,所以我要用格式化输入,分别存入下面的a b c中,高手帮忙!
下面这个是我没成功的尝试
char a[20];
char b[50];
char c[20];
int ret = sscanf(str, "%[^' ']* %['u'] %[^' ']"
, a, b, c);谢谢帮忙

解决方案 »

  1.   

    CStringArray arrTemp;
    CString strTemp;
    strTemp = "drw-rw-rw- 1 user   group    0 Oct 28  2003 -====流行音乐专用FTP=====-";

    char *ss=strTemp.GetBufferSetLength(strTemp.GetLength()); 
    char *p;

    arrTemp.RemoveAll();
    for ( p=strtok(ss, " "); p!=NULL; p=strtok(NULL, " ") )
    {
    arrTemp.Add(p);
    } CString str;
    str.Format("%s\r\n%s\r\n%s", arrTemp[0], arrTemp[3], arrTemp[8]);
    AfxMessageBox(str);
      

  2.   

    int ret = sscanf(str, "%s%*s%*s%s%*s%*s%*s%*s%s", a, b, c);这样便可你中间有一个*没用上……然后就玩完了……
      

  3.   

    还有c明显小了点,b大了点……group是不会有这么大的……
      

  4.   

    另外,你的sscanf里面的格式用的错了点,里面直接填字符或者转义字符就可以了,不要加上单引号scanf("%*[^\n]");//忽略一行,而且*要在前面而不是后面,在后面的话要匹配字符串的一个'*'字符……
      

  5.   

    strTemp = "drw-rw-rw- 1 user   group    0 Oct 28  2003 -====流行音乐专用FTP=====-";
    sscanf( strTemp, "%s %d %s   %s    %d %s %d  %d $s", ...)
      

  6.   

    int ret = sscanf(str, "%s%*s%*s%s%*s%*s%*s%*s%s", a, b, c);这样正确。
    要匹配的。
      

  7.   

    newbiestar 谢谢再问你一个问题 %*s 的意思是忽略掉非空格的字符串么? *代表忽略?请问哪里能找到这方面的资料?
    我如果想要"Oct 28  2003"保存到一个变量里是不是要用sscanf分别放到三个缓冲里然后再合起来?
    thank u
      

  8.   

    *代表的是忽略整个读取到的内容,无论是s还是什么其他,在各个Unix的manual page里面可以找到,MSDN里面也应该有。譬如scanf("%*d");这个就是忽略读入的一个整数。Oct这个东西么,基本上就是这样啦,没有什么简单的方法来做到把三段内容合一(除非你确定这三段内容的长度,并且确切的知道这个内容里面一定不出现的一个字符)……