Как объявить строки в C [дубликаты]

  

Возможный дубликат:
Распределение памяти char * и char []

Может кто-нибудь объяснить мне, в чем разница между этими строками кода?

char *p = "String";
char p2[] = "String";
char p3[7] = "String";

В каком случае я должен использовать все вышеперечисленное?

c
98 голосов | спросил summerc 4 Jpm1000000pmWed, 04 Jan 2012 22:55:53 +040012 2012, 22:55:53

4 ответа


0

Эта ссылка должна удовлетворить ваше любопытство.

По сути (забывая ваш третий пример, который плох), разница между 1 и 2 заключается в том, что 1 выделяет место для указателя на массив.

Но в коде вы все равно можете манипулировать ими как указателями - единственное, вы не можете перераспределить второе.

ответил fge 4 Jpm1000000pmWed, 04 Jan 2012 22:59:59 +040012 2012, 22:59:59
0

Строки в C представлены как массивы символов.

char *p = "String";

Вы объявляете указатель, который указывает на строку, хранящуюся где-то в вашей программе (изменение этой строки - неопределенное поведение) в соответствии с языком программирования C 2 ред.

char p2[] = "String";

Вы объявляете массив char, инициализированный строкой «String», оставляя компилятору задание на подсчет размера массива.

char p3[5] = "String";

Вы объявляете массив размером 5 и инициализируете его строкой "String". Это ошибка, потому что строка "String" не помещается в 5 элементах.

char p3[7] = "String"; - правильное объявление ('\ 0' - завершающий символ в строках c).

http://c-faq.com/~scs/cclass/примечания /sx8.html

ответил obo 4 Jpm1000000pmWed, 04 Jan 2012 23:03:48 +040012 2012, 23:03:48
0

Вы не должны использовать третий, потому что это неправильно. «String» занимает 7 байтов, а не 5.

Первый - это указатель (может быть переназначен на другой адрес), два других объявлены как массивы и не могут быть переназначены на другие области памяти (но их содержимое может измениться, используйте const, чтобы избежать этого).

ответил littleadv 4 Jpm1000000pmWed, 04 Jan 2012 22:58:08 +040012 2012, 22:58:08
0
char *p = "String";   means pointer to a string type variable.

char p3[5] = "String"; означает, что вы предварительно определяете размер массива, состоящего не более чем из 5 элементов. Обратите внимание, что для строк ноль "\ 0" также рассматривается как элемент. Так что этот оператор выдаст ошибку, так как количество элементов равно 7, поэтому должно быть:

char p3[7]= "String";
ответил SKM 4 Jpm1000000pmWed, 04 Jan 2012 23:01:21 +040012 2012, 23:01:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132