Banco de strings do C

3 respostas
C

Se eu posso fazer isso:

pq não posso fazer isso?

3 Respostas

E

Não é proibido pela linguagem, mas provavelmente você vai acabar tendo algum erro de execução dependendo das opções do compilador. No Microsoft C++ a opção é /GF (enable read-only string pooling).

#include <stdio.h>

int main (int argc, char *argv[]) 
{
    char *str1="String constante."; 
    str1[0] = 'q';
    printf (str1); /* qtring constante */
}

Sem a opção /GF, ele roda do jeito que você achou que tinha de rodar (imprime "qtring constante"). Com /GF, o programa morre:

ViniGodoy

Strings literais são gravadas numa área especial da memória, que é read-only. Então, para o C, isso aqui:

É geralmente diferente disso aqui:

No primeiro caso, você obtém um ponteiro para essa região read-only. Na segunda, o compilador cria uma string fora dessa região.
Não me lembro o local no padrão onde isso está especificado. Se eu achar, comento aqui.

E

http://www.lysator.liu.se/c/rat/c1.html#3-1-4

Criado 2 de setembro de 2010
Ultima resposta 2 de set. de 2010
Respostas 3
Participantes 3