Испытывая мое обычное барабанное соло ПРОСТО ПОПРОБУЙТЕ , вот как вы можете ответить на такие вопросы в будущем:
$ cat junk.c
#include <stdio.h>
char* string = "Hello\0";
int main(int argv, char** argc)
{
printf("-->%s<--\n", string);
}
$ gcc -S junk.c
$ cat junk.s
... исключение ненужных частей ...
.LC0:
.string "Hello"
.string ""
...
.LC1:
.string "-->%s<--\n"
...
Обратите внимание, что строка, которую я использовал для printf, равна "-->%s<---\n"
, пока глобальная строка находится вдве части: "Hello"
и ""
.Ассемблер GNU также завершает строки неявным символом NUL
, поэтому тот факт, что первая строка (.LC0) находится в этих двух частях, указывает на наличие двух NUL
s.Таким образом, длина строки составляет 7 байтов.Как правило, если вы действительно хотите узнать, что ваш компилятор делает с определенным фрагментом кода, выделите его в фиктивном примере, подобном этому, и посмотрите, что он делает, используя -S
(для GNU - MSVC также имеет флаг для вывода ассемблера,Я не знаю, это из рук вон).Вы узнаете много нового о том, как работает ваш код (или не работает в зависимости от обстоятельств), и вы быстро получите ответ, который на 100% гарантированно соответствует инструментам и среде, в которой вы работаете.