Инициализация строк в C

0

Вопрос

Я начал изучать C и только что узнал, что строки-это просто массивы символов. Я хотел видеть значения в строках в каждый данный момент, поэтому я установил точку останова в vscode, прошел через выполнение и просмотрел все значения.

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

    return 0;
}

Я видел это перед инициализацией a[] массив, в памяти уже есть значения. screenshot of vscode while debugging.

Мой вопрос в том, каковы эти ценности? Почему они там? Что они собой представляют?

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

Лучший ответ

1

При определении значения требуется часть памяти, которая могла бы содержать другие числа. В основном это те числа, которые отображаются на вкладке "отладка".

2021-11-24 14:32:02
0

Когда вы впервые объявляете массив или переменную, ей назначается память, и эта память уже может содержать некоторые значения мусора, поэтому она печатается следующим образом

Значение мусора может быть любым, языковой стандарт не определяет, каким оно должно быть

2021-11-24 12:55:09
0

Память есть память, она может быть неинициализирована (она же заполнена мусором) или может быть инициализирована данными.

В вашем случае, когда ваша программа перешла к вашей основной функции, для нее был создан стек, который будет содержать ваши локальные переменные (ваша локальная переменная-это объявленный вами массив символов, в основном указатель на какое-то место в памяти). До того, как вы инициализировали указанные указатели a и b чтобы указать на вашу строку, они могли содержать любые старые номера, и поэтому попытка прочитать "строку" по этому адресу даст вам больше случайного мусора.

Например, если вы написали int a = 5; в вашей программе и пройдя через нее, вы также увидите, что a может содержать некоторое случайное число, прежде чем назначить ему 5.

2021-11-24 07:01:48

Я понимаю. Но вот чего я, кажется, не могу понять, так это почему я вижу одни и те же значения каждый раз, когда отлаживаю программу?
jon doe
-1

Когда вы создаете новое значение, например целые числа или массивы, система предоставит этим значениям адрес для сохранения своих данных по этому адресу. На этом адресе могут быть некоторые данные для других приложений, и после закрытия этого приложения оперативная память не удалит их, поэтому перед инициализацией вы увидите эти данные.

2021-11-24 07:08:54

В многопользовательских операционных системах общего назначения память одного процесса никогда не содержит данных из другого процесса, за исключением данных, которые намеренно используются совместно. Операционная система очищает память перед переназначением ее другому процессу в целях безопасности.
Eric Postpischil

На других языках

Эта страница на других языках

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