Forum: Konvertera int till char

Forum huvudsida -> Programmering -> Konvertera int till char

Sidor: 1

Till botten

seal 17:27 - 11:a December 2007 | Post #1
Medlem
Inlägg: 32


Skicka PM
Hejsan, jag har en funktion som vill ha en pekare till en char
(char *), det är en funktion som skriver ut text på skärmen.

Men jag vill skicka med en siffra i argumentet, jag försökte med att kovertera den till char genom:
(char *)siffran

Men programmet krashar, att kovertera till char fungerar inte eftersom att funktionen vill ha en pekare.

Sedan har jag också alltid undrat vilket operator som används för att sätta ihop 2 st strängar, char alltså. Eller är det bättre att använda string här?

När ska man egentligen använda char, och när string?

Tack på förhand!




Independence 17:36 - 11:a December 2007 | Post #2
Administratör
Inlägg: 1800


Skicka PM
Funktioner för att hantera char-arrayer i C: http://www.cppreference.com/stdstring/index.html
Finns funktioner för att göra det du frågade här.

string används i C++ och char-arrayer i C? Ofta så blir det väl så att man programmerar mot APIer skrivna i C från C++ så man får använda char-arrayer ändå men.

-------------------------

Vi är riddarna som säger fiskbulle!





tobbez 17:39 - 11:a December 2007 | Post #3
Medlem
Inlägg: 364


Skicka PM
Behöver man använda char-arrayer i C++ är det ofta enklast att använda metoden .c_str() på strängar för att konvertera dem till char-arrayer.




Fasting 17:41 - 11:a December 2007 | Post #4
Medlem
Inlägg: 121


Skicka PM
Kan du inte göra en temporär variabel i funktionen som ville ha char som pekare och göra den till en int. När du gjort vad som nu skall göras ändrar du charen till det värde det ska få (om det nu skulle ändras).

  1. void function( char* ch){
  2. int temp = atoi(ch);
  3.  
  4. temp += 4;
  5. ch = itoa(temp, ch, 10);
  6. }

Nu vet jag dock inte om det är det du är ute efter, men det var iaf min tolkning av det hela.
Sedan om det funkar vet jag heller inte då jag inte testatSmiley

-------------------------
Efter att ni har läst det här har ni insett att det inte gav något.

Senast redigerad 17:44 - 11:a December 2007


seal 18:23 - 11:a December 2007 | Post #5
Medlem
Inlägg: 32


Skicka PM
Tack för era svar, vad föredrar ni? string eller char?
Vilket drar minst minne om man ska tänka så?




derfian 18:52 - 11:a December 2007 | Post #6
Medlem
Inlägg: 149


Skicka PM
    Citat av seal:
Tack för era svar, vad föredrar ni? string eller char?
Vilket drar minst minne om man ska tänka så?


char* drar mindre minne, men jag väljer string utan tvekan. så pass mycket trevligare att ha att göra med.




tobbez 19:09 - 11:a December 2007 | Post #7
Medlem
Inlägg: 364


Skicka PM
Säger som derfian - mycket trevligare att arbeta med string.




seal 19:16 - 11:a December 2007 | Post #8
Medlem
Inlägg: 32


Skicka PM
Okej, tänkte testa string efter att jag läst era svar. Men jag förstår verkligen inte varför jag får denna error:

`string'' has not been declared

kod:
  1. void drawFont(int xpos, int ypos, string *strText, SDL_Color *color);


Längst upp har jag:

  1. #include <string>

testade också med string.h om det skulle vara någon skillnad, men nej.

Allt detta är i en header fil.




Nissebosselasse 19:40 - 11:a December 2007 | Post #9
Medlem
Inlägg: 490


Skicka PM
Testa med std::string i fuktionshuvudet.

-------------------------
http://pushingcows.se
Gula Nallen



seal 20:21 - 11:a December 2007 | Post #10
Medlem
Inlägg: 32


Skicka PM
    Citat av Nissebosselasse:
Testa med std::string i fuktionshuvudet.


Ja där sa du något, konstigt nog fungerar inte det heller?
Lade även till:
using namespace std

i headern.






Nissebosselasse 20:23 - 11:a December 2007 | Post #11
Medlem
Inlägg: 490


Skicka PM
    Citat av seal:
    Citat av Nissebosselasse:
Testa med std::string i fuktionshuvudet.


Ja där sa du något, konstigt nog fungerar inte det heller?
Lade även till:
using namespace std

i headern.


Posta hela koden om du kan, är lättare att se felen då.

-------------------------
http://pushingcows.se
Gula Nallen



seal 21:13 - 11:a December 2007 | Post #12
Medlem
Inlägg: 32


Skicka PM
    Citat av Nissebosselasse:
    Citat av seal:
    Citat av Nissebosselasse:
Testa med std::string i fuktionshuvudet.


Ja där sa du något, konstigt nog fungerar inte det heller?
Lade även till:
using namespace std

i headern.


Posta hela koden om du kan, är lättare att se felen då.


Visst såhär ser det ut:

  1. #ifndef DRAWENGINE_H
  2. #define DRAWENGINE_H
  3.  
  4. #include <string.h>
  5. #include <SDL/SDL.h>
  6. #include <SDL/SDL_image.h>
  7. #include <SDL/SDL_ttf.h>
  8.  
  9. using namespace std;
  10.  
  11.  
  12. class drawEngine
  13. {
  14. public:
  15. drawEngine(const char* tmpScreenTitle, const char* tmpIconPath, int tmpScreenWidth = 800, int tmpScreenHeight = 600, int tmpScreenBit = 16, int tmpBitSize = 20);
  16. ~drawEngine();
  17.  
  18. void createSprite(char *path);
  19.  
  20. void drawSprite(int x, int y, SDL_Surface *tmpImg);
  21. void eraseSprite(SDL_Rect *rect);
  22.  
  23. void setColorkey(int r, int g, int b);
  24.  
  25. void setMap(char **mapdata);
  26. void drawBackground(int w, int h);
  27.  
  28. void drawTile(int type, int xpos, int ypos);
  29. void createBackgroundTile(int index, char *path);
  30.  
  31. void setScreen(char *path);
  32.  
  33.  
  34. //för fonter..
  35. bool setFont(char *path,int fontSize);
  36. void drawFont(int xpos, int ypos, std::string *strText, SDL_Color *color);
  37. void eraseFont(int xpos, int ypos);
  38.  
  39. void clearScreen();
  40.  
  41. void updateScreen();
  42.  
  43. bool Init();
  44.  
  45. int getScreenWidth();
  46. int getScreenHeight();
  47. int getBitSize();
  48. protected:
  49.  
  50. int screenWidth;
  51. int screenHeight;
  52. int screenBit;
  53. int bitSize;
  54. SDL_Surface *screen;
  55. SDL_Surface *bg;
  56.  
  57. char *arrTiles[16];
  58.  
  59. //för text..
  60. SDL_Surface *text;
  61. TTF_Font *font;
  62.  
  63. char **map;
  64.  
  65. private:
  66. int red;
  67. int green;
  68. int blue;
  69.  
  70. const char* iconPath;
  71. const char* screenTitle;
  72. };
  73.  
  74. #endif





derfian 22:27 - 11:a December 2007 | Post #13
Medlem
Inlägg: 149


Skicka PM
    Citat av seal:
Okej, tänkte testa string efter att jag läst era svar. Men jag förstår verkligen inte varför jag får denna error:

`string'' has not been declared

kod:
  1. void drawFont(int xpos, int ypos, string *strText, SDL_Color *color);


Längst upp har jag:

  1. #include <string>

testade också med string.h om det skulle vara någon skillnad, men nej.

Allt detta är i en header fil.


Det är <string> du ska använda. <string.h> är fel.




seal 23:00 - 11:a December 2007 | Post #14
Medlem
Inlägg: 32


Skicka PM
Japp nu fungerar det.

nu har jag i funktionen som skriver ut en text en pekare till en sträng:

void drawFont(int xpos, int ypos, std::string *strText, SDL_Color *color);

Så jag testade detta:

drawFont(400,300, & (string)"GAME OVER", &fntColor);

Fungerar fint men jag får en varning:

[Warning] taking address of temporary

Jag förstår varför jag får varningen, men behöver jag oroa mig? ,,r det värt att skapa en variabel och leverera minnesadressen till denna när jag anropar funktionen eller går detta bra?

Edit;
Nu vill jag aven konvertera från int till stringSmiley
Hur? hittade genom google att jag skulle använda atoi funktionen, men i de exemplerna använda dem char vilket jag inte vill i mitt fall.


Senast redigerad 23:03 - 11:a December 2007


Nissebosselasse 23:39 - 11:a December 2007 | Post #15
Medlem
Inlägg: 490


Skicka PM
Du kan skriva in en sträng direkt:

drawFont (400,300, "GAME OVER", &fntColor);

Fast du bör ändra funktionen så att den istället tar en referens till en std::string:

void drawFont(int xpos, int ypos, std::string &strText, SDL_Color *color);



-------------------------
http://pushingcows.se
Gula Nallen



seal 16:29 - 12:a December 2007 | Post #16
Medlem
Inlägg: 32


Skicka PM
    Citat av Nissebosselasse:
Du kan skriva in en sträng direkt:

drawFont (400,300, "GAME OVER", &fntColor);

Fast du bör ändra funktionen så att den istället tar en referens till en std::string:

void drawFont(int xpos, int ypos, std::string &strText, SDL_Color *color);



Detta med pekare och referenser är väldigt intressant men knepigt att börja med.

Tack för hjälpen :-) !

Edit;

Hmm nej det fungerade inte:

Först får jag att den tror att det är en char, testade att sätta (string) innan strängen. Men då får jag felmedd:

no matching function for call to `drawEngine::drawFont(int, int, std::string, SDL_Color*)''
candidates are: void drawEngine::drawFont(int, int, std::string&, SDL_Color*)


Senast redigerad 16:33 - 12:a December 2007


Sidor: 1

Forum huvudsida -> Programmering -> Konvertera int till char
Atom feed

Du får inte posta i den här tråden | Till toppen