Problema con programma c++

di il
3 risposte

Problema con programma c++

Buonasera a tutti, ho un problema con un programma in C++ in cui si utilizza una funzione che restituisce un puntatore.
il codice è questo :
#include <iostream>
using namespace std;
char *get_substr(char *sub, char *str){
    char *p,*p2,*start;
    
    for(int t=0;str[t];t++){
        p=&str[t];
        start =p;
        p2=sub;
        while(*p2 && *p2==*p){
            p++;
            p2++;
        }
        
        if(!*p2)
            return start;
        
    }
    return 0;
}

int main() {
    char *substr;
    //get_substr funzione di ricerca sottostringa e restituisce un puntatore alla prima lettera cercata, nel caso in cui ci sia
    substr= get_substr("tre","uno due tre quattro");
    
    cout << "sottostringa trovata : " << substr;
    
    return 0;
    
}
1. Quando passo "tre" e "uno de tre quattro nei parametri", i due puntatori della funzione puntano automaticamente alla prima lettera di ciascuna stringa, come mai?
2. Da parte del compilatore le stringhe passate sono viste come tipo string o come tipo char? e come mai con un tipo string posso creare una stringa che sta in un'unica cella di memoria mentre con un tipo char devo per forza creare un array di caratteri?

Grazie mille in anticipo!

3 Risposte

  • Re: Problema con programma c++

    1. ... come mai?
    Perché in C il nome dell'array è un puntatore al suo primo elemento ... è un concetto di base del C
    2....
    string del C++ è una classe, tutta un'altra storia. Una stringa non sta in una cella di memoria (è una frase senza senso).

    Un array di char è la classica stringa del C, terminata da NULL e ne viene gestita una all'interno dell'oggetto di classe string dal C++
  • Re: Problema con programma c++

    Grazie mille, ma scusa,per quanto riguarda la prima domanda io non passo il nome dell'array ma passo una stringa, è la sessa cosa?
  • Re: Problema con programma c++

    Se intendi

    "tre"

    questo è comunque un array di char (non modificabile) in memoria e viene passato comunque il puntatore al primo carattere
Devi accedere o registrarti per scrivere nel forum
3 risposte