String [c] - C - Programmation
Marsh Posté le 03-12-2005 à 13:08:32
houla. Bin en C, une chaine c'est char *. Y'a pas de type string de base.
genre
char *prout = "prout";
Marsh Posté le 03-12-2005 à 13:18:33
merci c'est niquel!
et sans vouloir abuser , pour concatener deux chaine c'est quoi ?
J'ai deja essayer . & + mais ca ne marche pas .
Marsh Posté le 03-12-2005 à 13:35:21
Ca me fait une erreur de segmentation :
Code :
|
Faut pas declarer un espace memoir par hasard ?
un truc du style : using namespace ?
Marsh Posté le 03-12-2005 à 13:49:12
non, faut utiliser malloc
man 2 malloc
Marsh Posté le 03-12-2005 à 13:50:32
Il y a beaucoup de choses à t'expliquer je pense, le plus simple c'est de te dégoter un cours ou un tutorial.
Y en a plein un peu partout, mais tu peux commencer par là :
http://mapage.noos.fr/emdel/init_c.htm
(et using namespace, c'est du C++, pas du C)
Marsh Posté le 03-12-2005 à 13:50:44
parce que tu essayes de mettre une "chaine" taille 11 dans une "chaine" de taille 7
lit
man strcat
Marsh Posté le 03-12-2005 à 13:51:08
l0ky a écrit : parce que tu essayes de mettre une "chaine" taille 11 dans une "chaine" de taille 7 |
Ses chaînes sont constantes de toute façon. Vaut mieux qu'il commence par apprendre les bases, ce sera plus rapide.
Marsh Posté le 03-12-2005 à 13:52:31
l0ky a écrit : parce que tu essayes de mettre une "chaine" taille 11 dans une "chaine" de taille 7 |
oue en fait elmo a raison, un tuto ca serait mieux
compile avec un gcc 2.9.truc.bidule.machin ca pete L13
Marsh Posté le 03-12-2005 à 13:55:52
Et ou faut il utiliser cette fonction ?
Es ce obligatoire ?
ceci retourne toujours la meme erreur :
Code :
|
et c'est plutot cette commande pour afficher l'aide de malloc :
man 3 malloc
merci
Marsh Posté le 03-12-2005 à 13:57:26
Je te dirais bien que ton malloc n'a servi à rien parce que tu as écrasé l'adresse allouée par ton affectation, mais je ne suis pas sûr que ça te parlera.
Lis le lien que je t'ai donné.
Marsh Posté le 03-12-2005 à 14:04:14
Si si ca me parle
je vais quand meme voir ce que ton lien mais j'ai deja fait du C du C++ mais y a longtemps.
une fois que mon probleme de concatenation sera resolu, je pense que tout ira bien.
C'est juste le debut qui est un peut laborieux
Marsh Posté le 03-12-2005 à 14:10:30
coolben a écrit : |
ciel, sauras tu me pardonner cette si grande erreur ?
Marsh Posté le 03-12-2005 à 14:11:08
coolben a écrit : Si si ca me parle |
je doute tres fortement la, parce que resoudre un probleme d'allocation memoire C avec des using namespace, c'est pas la reflexion de kk'un ki en a deja fait...
Marsh Posté le 03-12-2005 à 14:24:14
oh oui je te pardonne.
J'ai plus mis la correction dans le but que si quelqu'un qui n'y connait rien essaye la commande puisse facilement avoir la bonne.
Par contre je me souvenait bien que c'etait en c++ et sous windows qu'il fallait declarer using namespace std en haut du fichier afin que les programmes fonctionne.
J'avoue que je melange maintenant un peu tout.
Par contre je ne comprend pas vraiment la fonction malloc.
Pour moi elle libere un espace memoire d'une certaine taille pour une varible.
Et je pensait que si on alloue une donnée de taille plus petite dans cette variable, la taille de l'espace memoire reservé etait conservé et que par la suite on puisse mettre un donnée de taille plus grande que la premiere.
Marsh Posté le 03-12-2005 à 14:31:32
la on ne peut pas t'aider. IL y a trop a voir, trop a dire, trop a essayer par toi meme. Tu melanges tout, C/C++, memoire, domaine, bref c'est le delire complet. tu ne sais pas ce qu'est un pointeur, une zone memoire...
C'est pas une tarre, c'est pas un reproche, mais franchement il te faut lire des livres / doc sur le net, y aller lentement, pas a pas, comprendre chaque etape. Tu pars de 0 (comme nous tous a un moment) il te faudra donc un certain investissement personnel pour comprendre ce qu'il se passe
Marsh Posté le 03-12-2005 à 14:48:27
effectivement je melangais bien tout et surtout les pointeurs et leur affectation.
Maintenant mon script marche :
Code :
|
Let's to code
et j'oubliait, Merci a tout le monde
Marsh Posté le 03-12-2005 à 15:54:28
coolben a écrit : Maintenant mon script marche |
Marsh Posté le 03-12-2005 à 16:28:42
coolben a écrit : effectivement je melangais bien tout et surtout les pointeurs et leur affectation. |
|
|
Marsh Posté le 03-12-2005 à 16:30:09
Emmanuel Delahaye a écrit :
|
Certaines personnes preferent avec
Marsh Posté le 03-12-2005 à 16:44:01
Dion a écrit : Certaines personnes preferent avec |
genre
puts (("Hello world" )); |
des fois qu'y en ait une qui pète... On est jamais trop prudent...
Marsh Posté le 06-12-2005 à 10:39:26
Y a t il une fonction en c biensur, permettant de remplacer les caracteres risquant de poser probleme.
Je pense principalement à ceux-ci : \ / ' "
Sinon je pensait chercher un tel carractere avec strchr puis le modifier.
merci
Marsh Posté le 06-12-2005 à 10:50:42
coolben a écrit : Y a t il une fonction en c biensur, permettant de remplacer les caracteres risquant de poser probleme. |
Si tu dois faire un remplacement de un pour un, alors une simple boucle avec un "while((pt=strchr(...)) != NULL) suffit.
Si du veux remplacer une sous-chaîne par une autre (évidemment pas de même tailles) alors ça devient plus compliqué...
Marsh Posté le 06-12-2005 à 11:02:39
Mon cas correspond plus au deuxieme car je compte remplacer ' par '' et \ par \\
Marsh Posté le 06-12-2005 à 11:08:19
coolben a écrit : Mon cas correspond plus au deuxieme car je compte remplacer ' par '' et \ par \\ |
Alors tu crées une seconde chaîne (malloc => tu dois donc connaître sa taille finale) et tu y transfères la première.
La modification se fait durant le transfert...
' et " font tous deux un caractère...
Marsh Posté le 06-12-2005 à 11:09:35
(psql (la lib a postgres) demande pour son 'escapage' une chaine destination de taille egale a deux fois la taille d'origine, c'est une maniere rapide de regler le probleme)
Marsh Posté le 06-12-2005 à 14:43:26
J'entendait remplacer tout simple cote en doublant ce caratere.
Citation : caractere posant probleme ? pour qui ? |
ca pose probleme parce ma chaine doit etre elle meme incluse dans une autre chaine ou cette chaine est entourée par des simples cotes.
le tout et pour realiser une requete sql pour MySQL.
Marsh Posté le 06-12-2005 à 15:09:30
mysql_escape_string de libmysql demande aussi une chaine destination pareille que ce que disait chrisbk plus haut
Marsh Posté le 06-12-2005 à 15:10:57
et vu qu'il veut passer sa chainea mysql, je lui recommande FORTEMENT d'utiliser mysql_escape_string plutot que de se bricoler un truc foireux a lui (paske l'echappement de quote en sql standart, me semble pas que ca soit \')
Marsh Posté le 06-12-2005 à 15:41:39
en sql standard me semble que c'est '' (doubler la quote)
avec mysql je sais plus.
mais me semble pas qu'il y ait que ca a "escaper"
Marsh Posté le 16-12-2005 à 23:04:30
Encore un petit question :
Comment convertir un chaine de caractere en entier ?
J'aimerai en faite pouvoir passer en argument de mon programme un entier mais j'arrive pas a trouve une fonction qui me converti un char * en int
merci encore pour votre aide
Marsh Posté le 17-12-2005 à 00:13:34
Emmanuel Delahaye a écrit : genre
|
Rigole pas j'ai déja fait ca, voulais faire une macro avec du printf dedans, et les ... des macros c'est spécial GCC (et j'avais du codewarrior).
Attendez que je la retrouve...
edit : trouvé
patapé hein
Code :
|
Utilisation typique :
Code :
|
Bon d'accord je reconnais, ca fait bizarre, mais ca marche...
Marsh Posté le 17-12-2005 à 00:56:01
Mackila a écrit : Rigole pas j'ai déja fait ca, voulais faire une macro avec du printf dedans, et les ... des macros c'est spécial GCC (et j'avais du codewarrior).
|
Si tu mettais des parenthèses au "printf" t'aurais pas besoin d'en mettre des doubles lorsque t'appelles ta macro !!!
Marsh Posté le 03-12-2005 à 13:00:17
Bonjour
Depuis hier soir je cherche faire des chaines de caractere en c en vain.
De plus je ne comprend pas comment faire pour declarer un type string alors que j'utilise la bibliotheque string.h .
Je sais que l'on peut faire ca :
mais c'est un peu lourd
j'aimerai un truc du genre :
string chaine;
chaine = "toto";
merci d'avance