| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | newbie, strings problem Fra : Leif Neland | 
  Dato :  13-09-05 07:26 |  
  |   
            Det er vist for mange år siden, jeg har lavet c...
 
 Jeg vil gerne konkatenere nogle tal til en streng.
 
 char resbuffer[200]; // Sæt plads af
 resbuffer[0] = 0;  // Clear buffer
 ....
 for (...) {
 ....
 resbuffer=sprintf("%s:%0.1f", resbuffer,current_temp); /* error: 
 incompatible types in assignment */
 ....
 }
 
 
 Det kan da ikke være så svært...
 
 Leif
 
 
  
            
             |   |   
            
        
 
            
         
           N/A (13-09-2005) 
         
	
            | Kommentar Fra : N/A | 
  Dato :  13-09-05 18:42 |  
  |   
            
  
            
             |   |   
            
        
 
            
         
           Arne Vajhøj (13-09-2005) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  13-09-05 18:42 |  
  |   
            Bertel Lund Hansen wrote:
 > Leif Neland skrev:
 >>resbuffer=sprintf("%s:%0.1f", resbuffer,current_temp); /* error: 
 >>incompatible types in assignment */
 
 >        sprintf(resbuffer,"%s:%0.1f", resbuffer, current_temp);
 > 
 > Tricket er at man angiver resbuffer både som target og som
 > værdiparameter.
 
 I det konkrete tilfælde er jeg ret overbevist om at
 det virker.
 
 Men generelt vil jeg være lidt forsigtig med at have
 resultat strengen som værdi argument også.
 
 Arne
  
            
             |   |   
            
        
 
            
         
            Bertel Brander (13-09-2005) 
         
	
            | Kommentar Fra : Bertel Brander | 
  Dato :  13-09-05 18:50 |  
  |  
 
            Arne Vajhøj wrote:
 >>         sprintf(resbuffer,"%s:%0.1f", resbuffer, current_temp);
 >>
 >> Tricket er at man angiver resbuffer både som target og som
 >> værdiparameter.
 > 
 > 
 > I det konkrete tilfælde er jeg ret overbevist om at
 > det virker.
 > 
 > Men generelt vil jeg være lidt forsigtig med at have
 > resultat strengen som værdi argument også.
 Ja, i C-standarden står der om sprintf:
 "If copying takes place between objects that overlap,
 the behavior is undefined."
 I dette tilfælde vil det måske/sansynligvis virke, men hvis man
 ændrer format strengen til f.ex: ">%s:%0.1f" vil det sansynligvis
 fejle.
 -- 
 Absolutely not the best homepage on the net:
 http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
            
              |   |   
            
        
 
            
         
             Bertel Lund Hansen (13-09-2005) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  13-09-05 20:53 |  
  |  
 
            Bertel Brander skrev:
 > Ja, i C-standarden står der om sprintf:
 > "If copying takes place between objects that overlap,
 > the behavior is undefined."
 Åh, det havde jeg glemt. Så skal man omkring en buffer:
       ...
        char buffer[200];
       ...
        sprintf(buffer,"%s:%0.1f", resbuffer, current_temp);
        sprintf(resbuffer,buffer);
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
              Arne Vajhøj (13-09-2005) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  13-09-05 21:11 |  
  |   
            Bertel Lund Hansen wrote:
 > Bertel Brander skrev:
 >>Ja, i C-standarden står der om sprintf:
 >>"If copying takes place between objects that overlap,
 >>the behavior is undefined."
 > 
 > Åh, det havde jeg glemt. Så skal man omkring en buffer:
 >       ...
 >        char buffer[200];
 > 
 >       ...
 >        sprintf(buffer,"%s:%0.1f", resbuffer, current_temp);
 >        sprintf(resbuffer,buffer);
 
 strcpy I presume ...
 
 Arne
  
            
             |   |   
            
        
 
            
         
              Kent Friis (13-09-2005) 
         
	
            | Kommentar Fra : Kent Friis | 
  Dato :  13-09-05 22:15 |  
  |   
            Den Tue, 13 Sep 2005 21:53:25 +0200 skrev Bertel Lund Hansen:
 > Bertel Brander skrev:
 >
 >> Ja, i C-standarden står der om sprintf:
 >> "If copying takes place between objects that overlap,
 >> the behavior is undefined."
 >
 > Åh, det havde jeg glemt. Så skal man omkring en buffer:
 >       ...
 >        char buffer[200];
 >
 >       ...
 >        sprintf(buffer,"%s:%0.1f", resbuffer, current_temp);
 >        sprintf(resbuffer,buffer);
 
 Format string exploit :-þ
 
 resbuffer="%s"
 current_temp=0.0
 
 > sprintf(buffer,"%s:%0.1f", resbuffer, current_temp);
 
 Nu er buffer="%s:.0"
 
 > sprintf(resbuffer,buffer);
 
 sprintf(resbuffer, "%s":.0); /* hvor peger den tredje parameter på
 stakken henad? */
 
 I dette tilfælde er strcpy en nemmere løsning, og ellers: Brug aldrig
 en streng brugeren har indflydelse på indholdet af som format til
 *printf.
 
 Mvh
 Kent
 -- 
 Hard work may pay off in the long run, but laziness pays off right now.
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |