memset(buf, 0x00, sizeof(buf));
sprintf(buf,"%s/fpconfig/ttys.idx\0",getenv("HOME"));
if ((fp = fopen(buf,"r")) == NULL)
{
waitforCR("[%s]端口索引文件打开发生错误!",buf,1);
return 0;
}
while (fgets(buf,80,fp)!=NULL)
{
memset(strTmp, 0x00, sizeof(strTmp));
i = sscanf(buf, "%[^|]|%[^|]|%[^|]|%[^|]|\n",
NULL,strTmp,NULL,NULL);
               /*
                buf里的内容是这样的
tty03           |123456700|1|tty1a           |
  我只想获取其中123456700这部分,其他的就直接丢弃了。
所以我在其他几个应该是变量的地方用了NULL,目前运行没发现问题,
但不知道这样做是不是正确呢?
是不是还可以通过改写那个格式化字符来直接得到第2个间隔中的值??
谢谢!!!
       */
     if (i>0)
{
if (strncmp(strTmp, strNodeID, 9)==0)
{
fclose(fp);
return 1;
}
}
}
fclose(fp);
return 0;

解决方案 »

  1.   

    sscanf(buf, %s\t%s\t%s\t%s", str1,str2,str3,str4);
      

  2.   

    str1,str3,str4这些内容都不需要获得,为了节省内存,所以我传了NULL,不知道sscanf能否判断一下?
      

  3.   

    char * buf = "|123456700|1|tty1a           |";
      int x;
      sscanf(buf,"|%d",&x);
      

  4.   

    char * buf = "|123456700|1|tty1a           |";
      int x;
      sscanf(buf,"|%d",&x);  CString str;
      str.Format("%d",x);
      

  5.   

    技术上可行
    符合你的要求吗?
    如果不明白
    请给我发短消息
    请附: 帖子的地址
    或根据http://www.vcshare.net上的联系方式与我联系
    ---------------
    欢迎访问我的个人论坛http://www.vcshare.net/bbs
      

  6.   

    char res[100]={0};
    char* pstart = strchr(buf,'|');
    if( pstart )
    {
        pstart++;
        char* pend = strchr(pstart,'|');
        if( pend )
        {
           strncpy(res,pstart,pend-pstart);
        }
    }
    麻烦了一点儿,呵呵