String speichern !



  • Hallo

    Ich habe folgendes Code Segment:

    DWORD dwBytesRead = 0;
    	char szBuffer[101];
    			do
    			{
    				// Read data 
    				lLastError = extclass.Read(szBuffer,sizeof(szBuffer)-1,&dwBytesRead);
    				if (lLastError != ERROR_SUCCESS){
    					printf(" read from error");
    					return false;
    				}
    
    				if (dwBytesRead > 0)
    				{
    					// Finalize the data, so it is a valid string
    					szBuffer[dwBytesRead] = '\0';
    
    					// Display the data
    					printf("%d", szBuffer);
    
    					// Check if EOF (CTRL+'[') has been specified
    					if (strchr(szBuffer,EOF_Char))
    						fContinue = false;
    				}
    
    				strncpy(m_UMTS_signal_qual,szBuffer,sizeof(szBuffer)-1);
    			}
    		    while (dwBytesRead == sizeof(szBuffer)-1);
    			}
    	}
    	while (fContinue);
    

    Nun möchte ich szBuffer in einem Objekt m_Variable speichern.

    char m_Variable[101];
    so dass ich immer auf akktuellen Wert von m_Variable zugreifen kann:

    DWORD dwBytesRead = 0;
    	char szBuffer[101];
    			do
    			{
    				// Read data 
    				lLastError = extclass.Read(szBuffer,sizeof(szBuffer)-1,&dwBytesRead);
    				if (lLastError != ERROR_SUCCESS){
    					printf(" read from error");
    					return false;
    				}
    
    				if (dwBytesRead > 0)
    				{
    					// Finalize the data, so it is a valid string
    					szBuffer[dwBytesRead] = '\0';
    
    					// Display the data
    					printf("%d", szBuffer);
    				 strcpy(m_Variable,szBuffer); // !!! Wegen dieser Zeile Program stürzt ab !!!!!!!
    					// Check if EOF (CTRL+'[') has been specified
    					if (strchr(szBuffer,EOF_Char))
    						fContinue = false;
    				}
    
    				strncpy(m_UMTS_signal_qual,szBuffer,sizeof(szBuffer)-1);
    			}
    		    while (dwBytesRead == sizeof(szBuffer)-1);
    			}
    	}
    	while (fContinue);
    

    Was habe ich denn falsch gemacht ?
    Danke !
    Gruss



  • std::string benutzen.

    Bye, TGGC (Pipe my World.)



  • So wie ich das sehe, ist das ein typischer Fall eines Buffer Overflows.

    Schreib es mal so

    strncpy(m_Variable, szBuffer, sizeof(m_Variable) -1);
    

    Und falls das nicht klappt, benutze MAX_PATH

    char m_Variable[MAX_PATH];
    

    Gruß
    :: NoName ::



  • Mit
    strncpy(m_Variable, szBuffer, sizeof(m_Variable) -1);
    habe ich auch schon versucht, es hat nicht geklappt.

    std:string -> weiss ich nich wie ?!

    Gruss



  • Und was ist mit MAX_PATH ?
    Müssen es unbedingt 101 Zeichen sein ?

    Gruß
    :: NoName ::



  • knopper schrieb:

    std:string -> weiss ich nich wie ?!

    Siehe Doku oder Bücher.

    Bye, TGGC (Pipe my World.)



  • Ok:

    str=szBuffer;
    cout << str <<endl;

    Aber wie kann cih aber string nach char* konvertieren ?

    Ich benutze str im Java Native nach jstring umwandeln ?

    string str="test";
    jstring s;
    s=env->NewStringUTF((const char *)(LPCTSTR) str); // Das geht aber nicht !!!
    return s;

    Gruss



  • Danke, so gehts

    s=env->NewStringUTF(str.c_str());


Anmelden zum Antworten