Струна сходит с ума, если я не дам ему немного больше места. Кто-нибудь может объяснить, что здесь происходит? - PullRequest
36 голосов
/ 04 мая 2011

Во-первых, я хотел бы сказать, что я новичок в C / C ++, изначально я разработчик PHP, поэтому меня заставляют злоупотреблять переменными так, как мне нравится.

C - строгая страна, мне здесь не очень нравятся компиляторы, я привык нарушать правила, чтобы добиться цели.

Во всяком случае, это мой простой кусок кода:

char IP[15] = "192.168.2.1";
char separator[2] = "||";   

puts( separator );

Выход:

||192.168.2.1

Но если я изменю определение separator на:

char separator[3] = "||";

Я получаю желаемый вывод:

||

Так почему мне нужно дать человеку дополнительное пространство, чтобы он не спал с человеком перед ним?

Ответы [ 11 ]

1 голос
/ 04 мая 2011

C "String" всегда заканчивается на NULL, но вы просто не дадите ее строке, если напишите разделитель символов [2] = "||". И помещает, ожидает, что это \ 0 в ned в первом записываемом случае, пока не найдет \ 0, и здесь вы можете увидеть, где он находится в конце IP-адреса. Интересно, что вы даже можете увидеть, как локальные переменные расположены в стеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...