2010-06-04 7 views
0

J'espère avoir formaté le code correctement cette fois. Permettez-moi d'abord de dire que le code fonctionne tel quel; c'est en comprenant certaines parties et en modifiant d'autres que j'ai des ennuis. Je vais supprimer mes nombreux commentaires et me limiter à quelques questions à ce sujet. 1. FILE est un mot-clé dans Obj-C? Quelle est sa fonction? Pourquoi toutes les capsules? 2. Que fait "r"? 3. Le fichier texte contient déjà des chaînes contenant des espaces vides, chacune se terminant par \ n; pourquoi ne pas en faire des NSStrings au lieu des c-strings? 4. Pourquoi, lorsque j'essaie de modifier le paramètre de lancement du fichier (en utilisant les exécutables, en cliquant sur arguments et plus, et en tapant le paramètre) sur autre chose que/tmp (comme/Desktop), ai-je des erreurs? Après tout,/tmp est un endroit volatile et vulnérable. C'est l'erreur que j'ai eu pour/Desktop: Le débogueur a quitté en raison du signal 10 (SIGBUS).Travailler avec des fichiers

Voici le code:

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv []) { NSAutoreleasePool * Piscine = [[NSAutoreleasePool alloc] init];

if (argc == 1) 
{ 
    NSLog(@"You need to provide a file name"); 
    return 1; 
} 

FILE *wordFile = fopen(argv[1], "r"); 

char word[100]; 
while (fgets (word, 100, wordFile)) 
{ 
    word[strlen(word) - 1] = '\0'; 
    NSLog(@"%s is %d characs long", word, strlen(word)); 
} 

fclose (wordFile); 
[pool drain]; 
return 0; 

}

Répondre

0

La plupart de c'est une chose standard C, il arrive à compiler comme Objective-C, mais FILE et fopen() et fgets() sont simples à l'ancienne C.

FICHIER est probablement un # défini quelque part pour se référer à une définition de structure. Ce n'est pas un mot-clé, juste un symbole régulier défini (je pense) dans stdio.h.

"r" signifie "lisible". Rechercher fopen pour toutes les valeurs que l'argument peut avoir, mais "r", "r +", "b", "a", "w", etc sont quelques-unes des options.

Etes-vous sûr/Desktop est un répertoire valide? Allez dans ce répertoire dans une fenêtre de console et tapez "pwd" pour vous assurer que vous avez le bon chemin. Vous pouvez avoir un message d'erreur si wordFile est null (c'est-à-dire n'a pas pu trouver le fichier ou l'ouvrir pour une raison quelconque) avant d'essayer d'utiliser fgets dessus.

+0

Le terme «r» ne signifie-t-il pas techniquement «ouvert en lecture seule»? Et les autres sont "ouverts pour XXX seulement"? – MJB

+0

Eh bien, je le vois documenté comme "Ouvrir un fichier pour la lecture.Le fichier doit exister." "r +" signifie lire et écrire. Mais si ce n'est qu'un r, oui, lisez seulement. – rob

+0

Merci pour l'aide. Désolé pour le retard qui vous revient à ce sujet. Mais j'ai trouvé tout ce que vous avez mentionné dans un site Web C std lib. L'erreur msg est là (NSLog "Vous devez ... nom de fichier"). Je ne suis pas sûr comment approcher "changer dans ce répertoire dans une fenêtre de console". Est-ce la même fenêtre de console dans Xcode qui montre le programme en cours d'exécution? Si oui, quelle est la syntaxe dont j'ai besoin pour changer de répertoire? Est-ce cd/Desktop? – Rich