/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
error C2110: cannot add two pointers
Fra : Poul S. Sørensen


Dato : 16-04-05 11:01

Hej NG

her er et udklip af kode, som jeg prøver at kompilere:

AfxMessageBox( _T("Unable to open ") + Filename, MB_OK |
MB_ICONSTOP ) ;

hvor Filename er defineret som CHAR*.

Hvordan kan jeg lægge de 2 strenge sammen, uden at lave om på Filename 'ns
definition ?


--
/Poul S.



 
 
Ukendt (16-04-2005)
Kommentar
Fra : Ukendt


Dato : 16-04-05 14:35

> Hvordan kan jeg lægge de 2 strenge sammen, uden at lave om på Filename 'ns
> definition ?
>

+ virker kun på 'string' / 'CString' eller andre intelligente containere.

Med char* må du bruge sprintf. Altså noget i retning af

char errTxt17[] = "Unable to open :";
char* tmp = (char*)malloc(strlen(errTxt17) + strlen(Filename) + 5);
if (tmp != NULL)
{
sprintf(tmp , "%s %s" , errTxt17, Filename);
AfxMessageBox( tmp , MB_OK | MB_ICONSTOP ) ;
free(tmp);
}
// todo: yderligere fejlhåndtering


Nemmere er det dog blot at konstruere et midlertidigt CString objekt.
AfxMessageBox( _T("Unable to open ") + CString(Filename), MB_OK |
MB_ICONSTOP ) ;
Det vil nok være ligeså pænt hvis du skrev CString istedet for _T (eller
udenom?), for det er i realiteten to CStrings der bliver lagt sammen.

Iøvrigt: brug den standardiserede string istedet for den mfc specifikke
CString, hvis du synes.

tpt



Michael Rasmussen (16-04-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 16-04-05 15:23

On Sat, 16 Apr 2005 15:35:10 +0200, Troels Thomsen wrote:

>
> char errTxt17[] = "Unable to open :";
> char* tmp = (char*)malloc(strlen(errTxt17) + strlen(Filename) + 5);
hvorfor + 5?
I øvrigt er det mere smart og sikkert på denne måde:
char *t = (char *) malloc(strlen(errTxt17) + strlen(Filename) + 1);
strncpy(t,errTxt17, sizeof(t));
t = strncat(t, Filename, sizeof(t));
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Igor V. Rafienko (16-04-2005)
Kommentar
Fra : Igor V. Rafienko


Dato : 16-04-05 15:49

[ Michael Rasmussen ]


[ ... ]

> I øvrigt er det mere smart og sikkert på denne måde:
> char *t = (char *) malloc(strlen(errTxt17) + strlen(Filename) + 1);
> strncpy(t,errTxt17, sizeof(t));
> t = strncat(t, Filename, sizeof(t));


sizeof( t ) ?





ivr
--
"...but it's HDTV -- it's got a better resolution than the real world."
       -- Fry, "When aliens attack"

Ukendt (16-04-2005)
Kommentar
Fra : Ukendt


Dato : 16-04-05 16:08


> sizeof( t ) ?
>

strlen , undskyld, jeg havde ikke kompileret

+5 var bare forid jeg havde nogle mellemrum i min format streng,



Ukendt (16-04-2005)
Kommentar
Fra : Ukendt


Dato : 16-04-05 16:11

>
> sizeof( t ) ?
>

He ! Jeg _havde_ lavet det med strlen, det var Michael der skrev sizeof !!

Og ja, strcpy er måske mere oplagt,

tpt



Ukendt (16-04-2005)
Kommentar
Fra : Ukendt


Dato : 16-04-05 16:31


>
> her er et udklip af kode, som jeg prøver at kompilere:
>

Lad os nu sige at det kunne kompilere, kan du så godt se hvorfor det ikke
duer, og sikkert ville få programmet til at gå ned med et brag ?

tpt



Poul S. Sørensen (16-04-2005)
Kommentar
Fra : Poul S. Sørensen


Dato : 16-04-05 17:13


"Troels Thomsen" <nej tak ...> skrev i en meddelelse
news:42612f9f$0$269$edfadb0f@dread11.news.tele.dk...
>
>>
>> her er et udklip af kode, som jeg prøver at kompilere:
>>
>
> Lad os nu sige at det kunne kompilere, kan du så godt se hvorfor det ikke
> duer, og sikkert ville få programmet til at gå ned med et brag ?
>
> tpt

Ja, først tak for hjælpen - jeg ville bare undgå at bruge CString som
funktion-parameter.

Det kunne ske at Char* blive NULL og programmet ville "gå ned med et brag" -
er det det du tænker på? I så fald er det bare fornuftigere at bruge
CString.

/poul



Ukendt (17-04-2005)
Kommentar
Fra : Ukendt


Dato : 17-04-05 19:18

>
> Det kunne ske at Char* blive NULL og programmet ville "gå ned med et
> brag" - er det det du tænker på? I så fald er det bare fornuftigere at
> bruge CString.
>

Jo, også det, men helt logisk er der et problem.
På addresse 0x1000 findes strengen "Hello" og på adresse 0x2000 findes
strengen "World". Det betyder IKKE at der på adresse 0x3000 (jeg har lagt
pointerne sammen) findes strengen "Hello World" !!
Tvært om ejes hukommelsen nok af enten windows eller et andet program, og så
får vi ballade ...

tpt



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408176
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste