2012-08-06 13 views
6

Ora vediamo questo piccolo programmaC++: strcat() sovrascrive o sposta il null?

char s[20]="One"; 
strcat(s,"Two"); 
cout<<s<<endl; 

Qui in un primo momento s ha il valore "Uno" e per la rappresentazione visiva questo è il valore di s:

O - n - e - \ 0

poi aggiungo "Due" alla fine della stringa produrre questo:

O - n - e - T - w - o - \ 0

Ora, come potete vedere l'unico nullo nella stringa in un primo momento era dopo "One" ora è dopo "OneTwo"

La mia domanda è: Il null è sovrascritto dalla stringa "Due" e quindi aggiunge il proprio null alla fine.

Oppure il null che era già lì all'inizio è tornato per essere di nuovo alla fine?

(Questa domanda potrebbe sembrare di non fare la differenza, ma mi piacerebbe sapere di tutto imparo)

Grazie

+4

Se si utilizza C++, non è necessario 'strcat'. Usa 'std :: string' e' + = '. – Drise

risposta

12

Il primo \0 viene sovrascritto e un nuovo \0 viene aggiunto alla fine della stringa concatenata. Non c'è spazio per "spostare" qualsiasi cosa qui. Queste sono le posizioni in cui vengono assegnati i valori.

2

Sì, la \0 del primo argomento di strcat viene sovrascritto, e diventa l'ultimo carattere della stringa concatenata.

Essa non mossa in quanto tale, la funzione appena accoda\0 come ultimo carattere della stringa di concatenato.

2

L'unico modo per sapere con certezza è guardare la fonte della versione specifica di strcat. L'implementazione tipica sovrascriverà il primo null e copierà il null dalla seconda stringa nell'ultima posizione.

Si tratta di una selezione molto nitida, tuttavia non sarà possibile rilevare la differenza nell'output indipendentemente dal metodo utilizzato.

4

Sebbene la domanda abbia avuto una risposta corretta e ripetuta, potrebbe essere utile ottenere la risposta più ufficiale dalla fonte ™. O almeno dalle fonti che posso trovare con Google.

This document, che pretende di essere il ++ standard C (o di una bozza di lavoro della stessa), dice:

La libreria standard C++ fornisce 209 funzioni standard dalla libreria C [compreso strcat]. - "Libreria standard C", C.2.7, pg 811

Saltando per this document sostenendo di essere l'internazionale standard C, vediamo:

La funzione strcat aggiunge una copia della stringa puntata da s2 (compresa la terminazione null carattere) alla fine della stringa indicata da s1. Il carattere iniziale di s2sovrascrive il carattere nullo alla fine di s1. Se la copia avviene tra gli oggetti che si sovrappongono, il comportamento non è definito.

- "La funzione strcat", 7.21.3.1, pg 327

strcat effettivamente sovrascrive il carattere null.