символьный указатель - PullRequest
       1

символьный указатель

3 голосов
/ 19 февраля 2012

Почему этот код не работает?

int main(){
  char *str ="abcde";
   scanf("%s",str);
  printf("%s",str);
}

, но это работает?

int main(){
  char str[] ="abcde";
   scanf("%s",str);
  printf("%s",str);
}`

Ответы [ 3 ]

5 голосов
/ 19 февраля 2012

В первом коде вы объявляете указатель, который указывает на строковый литерал : "abcde".
Это может быть константа, и вы не сможете ее изменить.

Второй код объявляет массив и заполняет его ['a','b',c','d','e','\0'], и не является константой - так что вы можете изменить его.

4 голосов
/ 19 февраля 2012

Поскольку char *str ="abcde"; - это указатель на строковый литерал, который, скорее всего, хранится в постоянной памяти.

char str[] ="abcde"; - это массив, инициализированный "abcde".

.также проверьте Разница между символом * и символом []

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

Когда строковое значение непосредственно назначено указателю, оно сохраняется в блок только для чтения (обычно в сегменте данных), который используется совместно Функции

char *str  =  "GfG";

...

char str[] = "GfG";  /* Stored in stack segment like other auto
variables */  *(str+1) = 'n';   /* No problem: String is now GnG */

http://www.geeksforgeeks.org/archives/5328

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