2009-09-24 5 views
0

Pourquoi puis-je obtenir un code à partir de la console avec le code suivant?Conversion de caractères de tableau en programmation C

char array1[] = "Hello World"; 

char ch = array1; 
printf(" %s" , ch); 

(Il nous est demandé de ne pas le faire avec un pointeur)

+0

Comment vous a-t-on demandé de ne pas le faire avec un pointeur, mais l'erreur était qu'il vous manquait un '*' de la notation de pointeur? –

Répondre

6

Parce que vous devez faire un ch pointeur à un personnage. Le compilateur aurait dû vous avertir que vous étiez en train d'assigner un pointeur de caractère à une variable de caractère, et il aurait dû vous avertir que vous essayiez de printf("%s") sur une variable sans pointeur de caractères - si ce n'était pas le cas, vous devriez augmenter le niveau d'avertissement de votre compilateur!

Tout en ajoutant que l'un peu, étoile facilement oublié fait fonctionner correctement:

#include <stdio.h> 
int main() 
{ 
    char array1[] = "Hello World\n"; 

    char *ch = array1; printf(" %s" , ch); 
    return 0; 
} 

J'ai aussi pris la liberté d'ajouter une nouvelle ligne à la fin de votre chaîne et de le mettre dans une fonction main appropriée, pour l'exhaustivité.


Je viens de remarquer que vous avez dit que vous « n'êtes pas autorisé à le faire avec des pointeurs » - à peu près la seule façon de le faire est d'imprimer le caractère par caractère jusqu'à ce que vous frappez un null terminator:

#include <stdio.h> 
int main() 
{ 
    char array1[] = "Hello World\n"; 

    int i; 
    for (i = 0 ; array1[i] != '\0' ; i++) 
    { 
     printf("%c", array1[i]); 
    } 
    return 0; 
} 

sortie:

 
$ ./a.out 
Hello World 

une approche plus robuste serait de mettre aussi une limite sur le nombre de caractères que vous imprimez, mais juste pour vérifier \0 est probablement assez bien pour ce qui semble être un devoir.

+0

Merci à vous !!! Merci à vous !!! Merci à vous !!! \ n – user133466

+0

Mark, j'ai entré le code ci-dessus, mais Im essayant de vérifier le 4ème élément dans cette chaîne avec printf ("% s", s [3]); mais le projet se fige sur moi = ( – user133466

+0

@metashockwave s [3] est une réfrence de caractère donc vous devez changer le% s en% c pour n'imprimer que ce caractère –

Questions connexes