Присвоение строк любого размера указателю на символ - PullRequest
0 голосов
/ 26 февраля 2012

Прежде всего, я должен заявить, что я новичок в C ++ и программировании в целом.Я пойду прямо к делу.Мне интересно, можно ли назначить строку символов любого размера указателю на символ (не массиву, а указателю char *).Будет ли это нарушать какие-либо адреса памяти?Книга, из которой я учусь, похоже, ничего об этом не говорит.Кажется, я тоже ничего не могу найти в Google.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2012

У вас есть свой символьный указатель и вы хотите динамически создавать строки C

char *str;

говорят. Этот указатель будет использоваться для указания на первый символ строки. Строка представляет собой последовательность последовательных символов (байтов) в памяти. Что нам, чего добиться в памяти:

 str -> +---+---+---+---+---+----+
        | H | E | L | L | O | \0 |
        +---+---+---+---+---+----+

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

Чтобы дать str значение ne, выделите эту память. В C ++ это делается с помощью new operator следующим образом

str = new char[6];

Обратите внимание, что new имеет две версии new [] и new - одна предназначена для размещения массива объектов, а другая - для выделения одного объекта. ВСЕГДА используйте delete [], когда вы разместили его с новым [], также следует использовать new / delete. НЕ СМЕШАТЬ новое [] с удалением, а новое с удалением []

Это выделит массив из 6 символов для размещения строки. Чтобы поместить символы в строку, мы делаем это.

str[0] = `H`;
str[1] = `E];
...
str[5] = 0;

Но это было бы утомительно. Вместо этого мы можем использовать strcpy , чтобы сделать это для нас:

strcpy(str, "hello");

Он знает все о нулевом символе. Существует ряд функций, которые работают с этими типами строк - см. string

Это С-струны. Когда-то кто-то изобрел этот новый язык под названием C ++. Этот язык использует другую идею, называемую объектами, которая делает этот материал намного проще. Вам нужно взглянуть на стандартную библиотеку шаблонов (или STL). Примечания к этим строкам можно найти по string . В STL много вкусностей - вот ссылка STL

Надеюсь, это поможет

1 голос
/ 26 февраля 2012

Указатель char может указывать на строку любой длины, потому что длина строки определяется тем, когда вы натолкнетесь на NUL (0) байт в строке. Когда вы храните строки таким способом, он становится C-строкой. Например:

const char* str = NULL; // at this point,
                        // doesn't point to anything (not even a string)

str = ""; // valid
str = "a"; // valid
str = "hello"; // valid
str = "farewell, cruel world"; // valid
...