Ce qu'ils ont tous dit, vous devez allouer l'espace pour s1. Ce que tout le monde a mis en ligne fonctionnera très bien, mais si vous voulez un moyen plus simple d'allouer l'espace pour une chaîne existante et le copier dans un nouveau pointeur puis utilisez strdup comme ceci:
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
int main() {
const char s2[] = "asdfasdf";
char* s1;
s1 = strdup(s2);
printf("%s", s1);
return 0;
}
Quelqu'un a mentionné strdup plus tôt, ce serait un moyen de l'utiliser. La plupart des systèmes devraient le supporter puisqu'il est dans les librairies C standard. Mais apparemment, certains ne le font pas. Donc, si elle renvoie une erreur, écrivez la vôtre en utilisant la méthode déjà mentionnée, ou utilisez simplement la méthode déjà mentionnée;)
Le compilateur fera * une * vérification pour vous, mais il n'y a aucun moyen d'éliminer tous les programmes potentiellement dangereux, au moins pas en C. Beaucoup d'autres langues sont beaucoup plus protecteurs, mais la plupart d'entre eux ne vous permettent pas d'accéder à la mémoire arbitraire comme le fait C. – quark