str="20031006 20:15:06     成功登录服务器     正确"
sccanf(str,"%d %s     %s     %s",&lDate,str1,str2,str3);
想要得到:
lDate=20031006
str1="20:15:06"
str2="成功登录服务器"
str3="正确";
可是结果为
lDate=20031006
str1-3显示一样的字符,记得是:"20:15:06"
应该怎么才能得到我要的

解决方案 »

  1.   

    你的输入字符串中包含空白字符“ ”
    变成逗号就可以了。
    char str[]="20031006 20:15:06  ,   成功登录服务器  ,   正确";
    sscanf(str,"%d %s  ,   %s  ,   %s",&lDate,str1,str2,str3);
      

  2.   

    #include "stdafx.h"
    using namespace std;void main()
    {
    char str[]="20031006 20:15:06     成功登录服务器     正确";
    long date=0;
    char str2[20]="",str3[20]="",str4[20]="";
    sscanf(str,"%ld %s %s %s",&date,str2,str3,str4);
    cout<<date<<endl<<str2<<endl<<str3<<endl<<str4<<endl;
    getchar();
    }
      

  3.   

    以上程序在vc.net中测试通过。
      

  4.   

    把输入字符串的空格变成逗号,就可以用sscanf了
      

  5.   

    char* pstr="20031006 20:15:06    成功登录服务器     正确";
    char str1[100];
    char str2[100];
    char str3[100];
    int iDate;
    sscanf(pstr,"%d %s     %s     %s",&iDate,str1,str2,str3);直接可以得到需要.你是不是分配了str1, str2, str3一样的内存了.
      

  6.   

    奇怪了,刚才我用同样的程序怎么和搂主一样得到同样的结果了呢?
    搞得我花了好久写了另一个程序
    // scanf.cpp : Defines the entry point for the console application.
    //#include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    bool readstr(char * src, char *str)
    {

    if ( EOF != sscanf( src, "%s", str))
    return true;
    return false;
    }
    int main(int argc, char* argv[])
    {
    //long lDate;
    char str[20] = "";
    char string[]="20031006   20:15:06   成功登录服务器   正确";
    char *tmp;
    tmp = string;
    while (readstr(tmp, str))
    {
    printf("%s\n",str);   
    while ( tmp[0] == ' ' )
    tmp++;
    tmp = strpbrk( tmp, " " );
    if (!tmp)
    break;
    } return 0;
    }
      

  7.   

    昨天读取输入的那段代码有些错误,今天给出一段经过测试的程序(win2000+vc6)const int MAX_VALUE_LENGTH = 10;//单个内容最多字符数
    const int MAX_LINE_LENGTH = 200;//一行最多字符数
    const int MAX_LINES = 1000;//最多行数CStdioFile fr;
    CString strBuffer;
    char a[MAX_LINES][MAX_VALUE_LENGTH]
         ,b[MAX_LINES][MAX_VALUE_LENGTH]
         ,c[MAX_LINES][MAX_VALUE_LENGTH];int line=0;
    if(fr.Open("a.txt",CFile::modeRead))
    {
       while(fr.ReadString(strBuffer))
      {
         sscanf(strBuffer.GetBuffer(MAX_LINE_LENGTH),"%[^,],%[^,],%[^,]", &a[line],&b[line],&c[line]);
         strBuffer.ReleaseBuffer();
         TRACE3("%s,%s,%s\n",a[line],b[line],c[line]);
         line++;
       }
         fr.Close();
       }
       else
          fr.Abort();