То, что память в машине времени выполнения доступна только для чтения, совершенно не имеет значения. Прежде чем пытаться записать косвенно в память (я предполагаю, что это чтение / запись) через p, вы должны сначала определить эту память. Конечно, если оперативная память действительно доступна только для чтения, то она не будет работать независимо от того, сколько ошибок компиляции вы исправите.
Так что вы можете иметь: main()
{
char amit[20] = "amit";
char *p = amit; // which is the same as &amit[0]</p>
<p>// yes, you are permitted to write into amit[] like these next two lines:
p[0]="s";
p[1] = '\0'; // you must terminate the string if you don't want to use strcpy( ) or its friends</p>
<p>// but it's better in every way to strcpy( ) into amit[], like this:
strcpy( amit, "s" );</p>
<p>printf("%s",p);
}