string et NSString

tabliertablier Membre
03:57 modifié dans API AppKit #1
J'ai un problème d'initialisation de NSString. J'ai écrit:

#define Srce0 &quot;do shell script &#092;&quot;ps -cx -ww -o &#092;&#092;&#092;&quot;pid command&#092;&#092;&#092;&quot; &#092;&quot; &quot;<br />#define Srce1 @&quot;do shell script &#092;&quot;ps -cx -ww -o &#092;&#092;&#092;&quot;pid command&#092;&#092;&#092;&quot; &#092;&quot; &quot;<br />...<br />...<br />char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  leSource[512] ;<br />NSString&nbsp; &nbsp; &nbsp; *le_pid; <br />NSString&nbsp; &nbsp; &nbsp; *le_ppd;<br /><br />	strcpy(leSource, Srce0)&nbsp; ;<br />	le_pid = [NSString stringWithCString:Srce0] ;<br />	le_ppd = [NSString stringWithString:Srce1] ;<br />


Dans leSource  j'obtiens:  do shell script "ps -cx -ww -o \"pid command\" "  (ce qui est la bonne syntaxe mais pas le bon type d'objet)
Dans *le_pid  j'obtiens:  do shell script "ps -cx -ww -o \\"pid command\\" "    (là , le compilteur de script plante!)
Dans *le_ppd  j'obtiens:  do shell script "ps -cx -ww -o \\"pid command\\" "  (et là  aussi!)

Je n'arrive pas à  obtenir dans "le_pid" ou "le_ppd" le texte que j'ai dans "leSource" que j'utilise Cstring, utf8string ou string!

:-\\ Comment dois-je écrire le define pour que ça marche?

Réponses

  • AliGatorAliGator Membre, Modérateur
    03:57 modifié #2
    Le plus simple c'est d'utiliser les guillemets simples pour entourer les termes "pid command" au lieu des guillemets doubles, comme ça tu n'aurais pas à  te prendre la tête pour savoir combien de fois tu as à  les échaper !
    NSString* ShellSrc = @&quot;do shell script &#092;&quot;ps -cx -ww -o &#39;pid command&#39;&#092;&quot;&quot;;
    
  • tabliertablier Membre
    03:57 modifié #3
    J'ai utilisé les 4 formes suivantes (avec les méthodes appropriées):

    #define srce0 &quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#092;&#39;pid command&#092;&#39; &#092;&quot;)&quot;<br />#define srce1 &quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#39;pid command&#39; &#092;&quot;)&quot;<br />#define srce2 @&quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#092;&#39;pid command&#092;&#39; &#092;&quot;)&quot;<br />#define srce3 @&quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#39;pid command&#39; &#092;&quot;)&quot;<br />
    

    :P Ces quatres formes marchent.
    Je voudrais signaler quand même que les 4 NSString obtenus sont identiques et apparaissent dans la fenêtre du Debugger comme:
    set lesProcess to paragraphs of (do shell script &quot;ps -cx -ww -o &#092;&#39;pid command&#092;&#39; &quot;)
    

    mais quand je vais voir dans la mémoire, je trouve:
    set lesProcess to paragraphs of (do shell script &quot;ps -cx -ww -o &#39;pid command&#39; &quot;)
    


    J'ai un problème de conpréhension de la représentation des NSString par le debugger, car ' est représenté par \' par le debugger.

  • AliGatorAliGator Membre, Modérateur
    03:57 modifié #4
    dans 1164371330:

    J'ai utilisé les 4 formes suivantes (avec les méthodes appropriées):

    #define srce0 &quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#092;&#39;pid command&#092;&#39; &#092;&quot;)&quot;<br />#define srce1 &quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#39;pid command&#39; &#092;&quot;)&quot;<br />#define srce2 @&quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#092;&#39;pid command&#092;&#39; &#092;&quot;)&quot;<br />#define srce3 @&quot;set lesProcess to paragraphs of (do shell script &#092;&quot;ps -cx -ww -o &#39;pid command&#39; &#092;&quot;)&quot;<br />
    

    :P Ces quatres formes marchent.
    C'est normal :
    1) La seule différence entre les 2 premières lignes et les 2 dernières c'est que c'est direct une NSString ou que c'est un chaine C, mais si derrière tu utilises les méthodes appropriées, le contenu final est le même. Donc logique
    2) Le caractère "apostrophe" n'a pas à  être échappé, puisque tu n'as pas dans ta commande shell de chaines encadré par des apostrophes. Donc l'apostrophe seul suffit. Rien ne t'empêche de l'échapper, mais pour le coup, au même titre que \z afficherait un "z" simple car le z n'est pas à  échapper et que \z n'a pas de signification spéciale comme \n ou \t, ben il affiche le caractères normalement, même si tu l'échappes.
    dans 1164371330:
    Je voudrais signaler quand même que les 4 NSString obtenus sont identiques et apparaissent dans la fenêtre du Debugger comme:
    set lesProcess to paragraphs of (do shell script &quot;ps -cx -ww -o &#092;&#39;pid command&#092;&#39; &quot;)
    

    mais quand je vais voir dans la mémoire, je trouve:
    set lesProcess to paragraphs of (do shell script &quot;ps -cx -ww -o &#39;pid command&#39; &quot;)
    


    J'ai un problème de conpréhension de la représentation des NSString par le debugger, car ' est représenté par \' par le debugger.
    Oui c'est bizarre, je veux dire j'aurais jamais pensé que le débugger affiche les apostrophes sous forme échappée, alors que je n'en voit pas la raison. Mais bon ça me choque pas plus que ça, il échape bien les caractères non imprimables en les affichant 0xNNN alors bon.
Connectez-vous ou Inscrivez-vous pour répondre.