Para entender esse erro ou problema, você deve primeiro saber a diferença entre o ponteiro e o array, então aqui primeiro eu explico as diferenças entre eles
matriz de string
char strarray[] = "hello";
Na memória matriz é armazenada em células de memória contínuos, armazenado como [h][e][l][l][o][\0] =>[]
é célula de memória tamanho byte um carvão animal, e esta células de memória contínuos pode ser acesso por nome com o nome strArray here.so aqui matriz de cadeia strarray
si contendo todos os caracteres de cadeia inicializado para este it.In caso aqui, "hello"
para que possamos alterar facilmente seu conteúdo de memória, acessando cada caractere por seu valor de índice
`strarray[0]='m'` it access character at index 0 which is 'h'in strarray
e seu valor foi alterado para 'm'
um valor tão restrito alterado para "mello"
;
Um ponto a ser observado aqui é que podemos alterar o conteúdo da matriz de string alterando caractere por caractere, mas não podemos inicializar outra string diretamente para ela, como strarray="new string"
inválida.
Ponteiro
Como todos sabemos, o ponteiro aponta para o local da memória na memória, o ponteiro não inicializado aponta para o local aleatório da memória e, após a inicialização, aponta para o local específico da memória
char *ptr = "hello";
aqui o ponteiro ptr é inicializado para uma string "hello"
que é uma string constante armazenada na memória somente leitura (ROM), portanto "hello"
não pode ser alterada, pois é armazenada na ROM
e ptr é armazenado na seção da pilha e apontando para a string constante "hello"
então ptr [0] = 'm' é inválido, pois você não pode acessar a memória somente leitura
Mas ptr pode ser inicializado para outro valor de string diretamente, pois é apenas um ponteiro, para que possa ser apontado para qualquer endereço de memória da variável do seu tipo de dados
ptr="new string"; is valid