2017-09-24 1 views
0

J'essayais d'imprimer le contenu d'un tableau de caractères dans la fonction principale en acceptant l'adresse de base de ce tableau dans un pointeur de caractère qui est renvoyé par une autre fonction. En fait ici le code est d'accepter une chaîne avec des voyelles et de retourner la chaîne modifiée sans voyelles. Mais lorsque j'imprime le tableau de caractères dans la fonction principale, le code n'imprime rien. Il est possible de faire avec une classe de chaînes mais je veux savoir quel est le problème lors de l'utilisation de pointeurs de caractères.Comment imprimer le contenu d'un tableau de caractères dans la fonction principale dont l'adresse de base est renvoyée par une fonction via un pointeur de caractère?

#include<iostream> 
    #include<string.h> 
    using namespace std; 
    char * print(char * s) 
    { 
     int j=0,len; 
     while(s[j]!='\0') 
      j++; 
     len=j; 
     char scopy[len]; 
     char * sn; 
     j=0; 
     for(int i=0;i<len;i++) 
     { 
      if(s[i]!='a' && s[i]!='e' && s[i]!='i' && s[i]!='o' && s[i]!='u' && s[i]!='A' && s[i]!='E' && s[i]!='I' && s[i]!='O' && s[i]!='U') 
      { 
       scopy[j]=s[i]; 
       j++; 
      } 
     } 
     sn=scopy; 
     return sn; 
    } 
    int main() 
    { 
     int n; 
     cout<<"enter n:\n"; 
     cin>>n; 
     char st[n]; 
     cout<<"enter string:\n"; 
     cin>>st; 
     char * ps=print(st); 
     cout<<"the string is\n"<<ps[0]<<ps[1]<<ps[2]<<"\n"; //Here when i print the array contents individually using the base pointer, it prints successfully 
     for(int i=0;ps[i]!=NULL;i++) //the problem is here, it does not print anything 
      cout<<ps[i]; 
    } 
+2

Vous avez deux problèmes: Le premier est que vous ne terminez pas la chaîne. La seconde est que vous renvoyez un pointeur vers un tableau local qui sortira de sa portée et disparaîtra immédiatement si vous faites 'return'. –

+1

Vous devriez vraiment utiliser 'std :: string' ici. Beaucoup plus facile à utiliser, et évite toutes les difficultés que vous rencontrez. –

Répondre

0

Votre code appelle Comportement non défini, car il renvoie un pointeur vers une variable locale, qui sont hors de portée dès que la fonction prendra fin:

char * print(char * s) 
{ 
    ...  
    char scopy[len]; 
    char * sn; 
    ... 
    sn=scopy; 
    return sn; 
} 

De plus, vous ne pas nul terminer la chaîne, puis vous faites:

for(int i=0; ps[i]!=NULL ;i++) 
    cout << ps[i]; 

ps n'est pas null terminé, donc ps[i] != NULL sera toujours vrai.


Puisque vous utilisez C++, je vous recommande fortement d'utiliser std::string, et non des chaînes de style C.

+0

Vous êtes les bienvenus @ Sajeed786. Vous pouvez * accepter * ma réponse si cela vous a aidé. – gsamaras