|
| 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
| |
|
|