2016-03-16 4 views
-1

Lorsque j'essaie d'imprimer chaque caractère du fichier, j'obtiens une erreur de segmentation. Je ne comprends pas pourquoi.Je ne comprends pas comment j'obtiens un défaut de segmentation

void parseStringAndDelete(char *file) 
{ 
// I a passing "drwxr-xr-x 1 ftp ftp    0 Mar 07 12:34 A_Folder" 
// as an argument for the function 
int i = 0; 
int k = 0; 
int len = strlen(file); 
int startIndex = 0; 

//printf("%s\n", file); 
//printf("%d\n", len); 
if(file[0] == 'd') 
    { 
     for(i = 0; i<len; i++) 
     { 
     printf("%s\n", file[i]); 
     } 
    } 

} 
+0

J'ai trouvé l'erreur. Pour printf ("% c \ n", fichier [i]) pas printf ("% s \ n", fichier [i]). Je crois parce que j'imprime caractère par caractère pas seulement une chaîne. –

+1

Activer les avertissements du compilateur et les regarder. –

+0

Exactement:% s est utilisé pour l'impression de chaînes,% c pour l'impression de caractères. Vous devez d'abord apprendre à utiliser un débogueur, donc au moins, vous trouverez la ligne qui se bloque, pas seulement "Je reçois une erreur de segmentation". Deuxièmement, chaque fois que vous avez un problème, vous devez l'aborder en disant: "Je me suis trompé quelque part, quelle erreur ai-je commise?" Ne pensez jamais: "Mon code est correct, pourquoi ça ne marche pas?" Pensez toujours: "Mon code est faux Où est-il faux?" – gnasher729

Répondre

2

Si vous souhaitez imprimer chaque caractère de la chaîne, vous devez utiliser %c et non %s.

printf("%c\n", file[i]); 

De plus,

Lors de l'impression d'une chaîne à l'aide printf("%s", ..), vous devez passer une adresse où la chaîne réside, non pas le contenu de l'adresse.

Ainsi, pour un char* str = "hello", déclaration d'impression serait

printf("%s\n", str); 

et NON

printf("%s\n", str[0]); 
+2

Je pense que l'OP veut 'printf ("% c \ n ", fichier [i]);' –

+0

Merci, c'est logique. J'ai corrigé le problème en passant de% s à% c dans printf –