Странная проблема с дампом ядра - PullRequest
0 голосов
/ 14 октября 2010

Мой этот код - дамп ядра:

int main(int argc,char *argv[])
{
   char *p = "onnm";
   printf("%c\n",++*(p++));
   return 0;
}

В чем может быть причина в строке printf?

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

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

Используйте, например, char p[] = "onnm";

1 голос
/ 14 октября 2010

Вы можете написать такой код из-за «несоответствия в языковом стандарте» языка C. Например,

const char const_buff[] = { 'o','n', 'n', 'm', '\0' }; // OK

char* pArray = const_buff;            // not OK

В той же строке он не должен был позволять вам компилировать,

char *p = "onnm";

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

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