L'inizializzazione di stringhe in C

0

Domanda

Ho iniziato a imparare il C e appena appreso che le stringhe sono solo array di caratteri. Volevo vedere i valori sono stringhe in ogni dato momento, così ho impostato un punto di interruzione in vscode, un passo attraverso l'esecuzione, e guardò tutti i valori.

int main()
{
    char a[4] = "foo";
    char b[4] = "bar";

    return 0;
}

Ho visto che prima di inizializzare il a[] array, ci sono già i valori in memoria. screenshot of vscode while debugging.

La mia domanda è, che cosa sono questi valori? Perché sono lì? Che cosa rappresentano?

c
2021-11-24 06:29:21
4

Migliore risposta

1

Quando si definisce un valore, si prende una parte di memoria che può contenere altri numeri. Si tratta fondamentalmente di quei numeri che viene mostrato nella vostra scheda di debug.

2021-11-24 14:32:02
0

Quando in primo luogo dichiarare array o variabile, viene assegnata a memoria e che la memoria può contenere alcuni valori spazzatura già, in modo che le stampe come in questo modo

Il valore dell'immondizia può essere qualsiasi cosa, la lingua standard non specifica che cosa dovrebbe essere

2021-11-24 12:55:09
0

La memoria è la memoria, potrebbe essere inizializzata (aka riempita di spazzatura) o potrebbe essere inizializzato con i dati.

Nel tuo caso, quando il programma è saltato per la funzione principale di una pila è stato creato che contiene le variabili locali (locale variabile char array dichiarato, in pratica un puntatore a un po ' di posto in memoria). Prima di inizializzare detto puntatori a e b a punto di una stringa, si potrebbe avere contenuti tutti i vecchi numeri e quindi cercare di leggere la "stringa" all'indirizzo darebbe più casuale spazzatura.

Per esempio, se hai scritto int a = 5; in un programma e un passo attraverso, si dovrebbe allo stesso modo vedi che potrebbero contenere alcuni numeri casuali prima di assegnare 5.

2021-11-24 07:01:48

Vedo. Ma la cosa che non riesco a capire è il motivo per cui faccio a vedere i valori stessi, ogni volta che faccio il debug del programma?
jon doe
-1

Quando si crea un nuovo valore come numeri interi o matrici, un sistema di dare a questi valori di un indirizzo per il salvataggio dei dati su tale indirizzo. Ci potrebbero essere alcuni dati su tale indirizzo, per altre applicazioni, e dopo aver chiuso l'applicazione, la RAM non rimuoverli, quindi prima di inizializzazione, potrà vedere i dati.

2021-11-24 07:08:54

In generale-scopo multiutente sistemi operativi, la memoria di un processo, non contiene i dati da un altro processo, fatta eccezione per i dati che è volutamente condiviso. Il sistema operativo cancella la memoria prima di riassegnazione di un altro processo, per motivi di sicurezza.
Eric Postpischil

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................