warning: deprecated conversion from string constant to 'char

algemene C code
Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

warning: deprecated conversion from string constant to 'char

Berichtdoor astrofrostbyte » 09 Jun 2013, 13:42

Hieronder een klein stuk voorbeeld code die een warning geeft bij het doorgeven van een constant string aan een functie :
Code: Alles selecteren
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20,4 );           // Create object , 20Characters , 4 lines

//-------------------------------------------------------------------------------------
void lcd_print(byte col, byte line, char *str)
{
  lcd.setCursor(col,line);
  lcd.print(str);
}
//-------------------------------------------------------------------------------------
void setup()
{ Serial.begin(9600);  Serial.print("Startup testcode");

  lcd.init();
  lcd.backlight();
  lcd.print("Startup Testcode");

  lcd_print( 0, 1, "functiontest");                         // <<----   Boosdoener !
}//setup
//-------------------------------------------------------------------------------------
void loop() {}


Geeft de volgende warning :
sketch_jun09b.ino: In function 'void setup()':
sketch_jun09b.ino:14: warning: deprecated conversion from string constant to 'char*'


De boosdoener is :
Code: Alles selecteren
 lcd_print( 0, 1, "functiontest");                         // <<----   Boosdoener !



Is er een betere methode on dit in C te omschrijven ??

Ik kan het gewoon aanpassen door de constant te casten, en de warning is nu weg.
Code: Alles selecteren
lcd_print( 0, 1, (char *)"functiontest");

Maar ik twijfel of dit de juiste manier van aanpak is.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Advertisement

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: warning: deprecated conversion from string constant to '

Berichtdoor Karel » 10 Jun 2013, 11:43

Ik vermoed dat het probleem erin zit dat de aangeroepen functie lcd_print niet "weet" dat de meegegeven parameter in string constant is. Als lcd_print de variabel str zou willen wijzigen kan dat. Dan zit je echter in vaste data te schrijven. Als je dan een te lange string zou toekennen overschrijf je geheugen dat voor wat anders wordt gebruikt en wordt het resultaat onvoorspelbaar.

Je zou eens in de source van lcd.print moeten kijken wat daarin anders wordt gedaan, zodat je de warning niet krijgt als je lcd.print aanroept.
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: warning: deprecated conversion from string constant to '

Berichtdoor Karel » 10 Jun 2013, 11:49

Of je declareert

Code: Alles selecteren
void lcd_print(byte col, byte line, const str[])
If you think education is expensive, try ignorance! (Derek Bok)

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: warning: deprecated conversion from string constant to '

Berichtdoor astrofrostbyte » 10 Jun 2013, 23:36

thanks, in de lcd library gebruiken ze inderdaad hetzelfde zoals jij ook aangeeft :

void LiquidCrystal_I2C::printstr(const char c[] ) {
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: warning: deprecated conversion from string constant to '

Berichtdoor Karel » 11 Jun 2013, 10:24

Karel schreef:Of je declareert

Code: Alles selecteren
void lcd_print(byte col, byte line, const str[])


Zit een foutje in. moet zijn:

Code: Alles selecteren
void lcd_print(byte col, byte line, const char str[])



@Moderator: waarom mag ik een eigen bericht niet aanpassen? Zo blijft een fout zichtbaar, en bestaat de kans dat iemand na het lezen van de (foute) oplossing foute code overneemt. Die vraag had ik graag in het bericht zelf aangepast. (met omschrijving van reden tot wijziging).

Groet, CJ
If you think education is expensive, try ignorance! (Derek Bok)

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten