Avatar billede deamill Nybegynder
25. juli 2002 - 08:27 Der er 8 kommentarer og
3 løsninger

Typecast i Visual C++

Hvordan laver man et typecast fra long int til string?

Noget ligende??:

long int x;
s1, s2 string;
s2="kbn";
s1 = s2 + "Hej" + string(x);
Avatar billede wisen Nybegynder
25. juli 2002 - 08:35 #1
Du skal bruge "itoa"; Noget i stil med :

char buffer[25];
itoa(buffer, x, 10);
Avatar billede kamikaze Nybegynder
25. juli 2002 - 08:47 #2
Der er også en ltoa der tager en long som argument.

_ltoa, _ltow
Convert a long integer to a string.

char *_ltoa( long value, char *string, int radix );
Avatar billede kamikaze Nybegynder
25. juli 2002 - 08:48 #3
// kompilerer i MSVC konsol-applikation

#include <iostream.h>
#include <string>

using std::string;

int main()
{
    long int x;
    x=1024;
    char tmp[10];
    ltoa(x, tmp, 10); // tmp holder nu værdien af x som streng

    string s1 = "Hello, ";
    strcat((char*)s1.c_str(), tmp);

    cout << s1.c_str() << endl;

    return 0;
}
Avatar billede jpk Nybegynder
25. juli 2002 - 08:49 #4
Følgende dit eget eksempel, noget lign.:

long int x=123456;
string s1, s2 = "kbn";
char chBuf[30];
sprintf(chBuf, "%s%s%d", s2.c_str(), "Hej", x);
s1 = chBuf;
Avatar billede deamill Nybegynder
25. juli 2002 - 10:34 #5
Nedenstående virker nu, men problemet er at efter 3 gennemløb af for løkken, så dør programmet pga. "strcat", er der en grænse for hvor stor en streng må blive!?

long int calVal;
char chBuf[30];
string outPut;
...
    for(x=0;x<steps+1;x++)
    {
        ...   
        calVal=y;

        sprintf(chBuf, "%s%s%d", "", " ", calVal);
        strcat((char*)outPut.c_str(), chBuf);
    }
Avatar billede jpk Nybegynder
25. juli 2002 - 10:41 #6
Brug
outPut += chBuf;
i stedet for
strcat((char*)outPut.c_str(), chBuf);
Avatar billede jpk Nybegynder
25. juli 2002 - 10:42 #7
string::c_str() returnerer en pointer der er const!
Du må ikke bruge den til at ændre strengen...
Avatar billede kamikaze Nybegynder
25. juli 2002 - 13:52 #8
jpk har ret...
Avatar billede deamill Nybegynder
25. juli 2002 - 14:04 #9
det kan godt være i tror jeg er lidt småskør, men hvis jeg kører "outPut += chBuf;" i en for løkke så første gang går det okay anden gang går det også okay med 3 gang bliver inholdet af outBuf lige pludselig en eller anden mærkelig adresse ligende ting!?! Hvis jeg laver en outBuf.length(); returnerers den korrekte længde, men rent visuelt indeholder den f.eks. kun 5 mærkelige tegn!?

Nå, men jeg må jo hellere dele pointene mellem jer, og så vælge et andet programmeringssprog :o)
Avatar billede deamill Nybegynder
25. juli 2002 - 14:54 #10
Hvis man stepper nedenstående igennem og holder øje med s1, vil man se at efter 3 gennemløb, så indeholder s1 ligepludselig noget crap!!

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string s1, s2;
        long int x;
    char chBuf[30];

    s1="Antal";
    s2=" loops";
        s1=s1+s2;
   
    for(x=0;x<100+1;x++)
    {
        sprintf(chBuf, "%s%s%d", "", " ", x);
        s1+=chBuf;
    }
    return 0;
}

Jeg fatter det ikke!!!?
Avatar billede deamill Nybegynder
25. juli 2002 - 14:57 #11
jeg laver lige et nyt spørgsmål!

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester