Problema con array di puntatori

di il
3 risposte

Problema con array di puntatori

Salve a tutti.
Sono nuovo della programmazione C/C++, sto provando a fare un semplice programma in C++ che prende in input dall'utente delle stringhe e inserisce un puntatore a queste stringe in un array in modo da formare un array di puntatori.
Un'altra funzione scorre l'array e stampa le stringhe.
Ecco il codice:
#include <iostream>
#include <istream>

int MAXLEN = 1000;
int MAXLINES = 5000;

using namespace std;


void readline(int numline, char *lineptr[]);
void writeline(int numline, char *lineptr[]);

int main (int argc, char * const argv[]) {
	int numline;
	char *lineptr[MAXLINES];
	
	cout << "Quante righe vuoi inserire: ";
	cin >> numline;
	
	readline(numline,lineptr);
	writeline(numline,lineptr);
		
}

void readline(int numline, char *lineptr[]) {
	char *p, line[MAXLEN];
	int n=0, i=0;
	
	while(n != numline+1) {
		cin.getline(line, MAXLEN);
		line[strlen(line)] = '\0';
		strcpy(p, line);
		lineptr[i] = p;
		i++;
		n++;
	}		
}

void writeline(int numline, char *lineptr[]) {
	for(int i = 0; i<numline;i++){
		cout << lineptr[i] << "\n";
	}
}
Il problema è la stampa delle stringhe, vengono stampati dei numeri separati da slash e non le stringhe.
L'array di puntatori mi sembra correttamente riempito perchè se faccio un

cout << lineptr

nella funzione readlines() viene stampata la stringa appena inserita.
Come mai?
Grazie!

3 Risposte

  • Re: Problema con array di puntatori

    
    strcpy(p, line);
    
    p è un puntatore che punta a nulla. In quale spazio di memoria credi che stai copiando la stringa line?
  • Re: Problema con array di puntatori

    Hai ragione, ecco la funzione riscritta:
    void readline(int numline, char *lineptr[]) {
    	char line[MAXLEN];
    	int n=0, i=0;
    	
    	while(n != numline+1) {
    		cin.getline(line, MAXLEN);
    		line[strlen(line)] = '\0';
    		char *p = (char *) malloc(MAXLEN * sizeof(char));
    		strcpy(p, line);
    		lineptr[i] = p;
    		i++;
    		n++;
    	}		
    }
    in questo modo funziona, mi chiedo però se è corretto dichiarare dentro un ciclo while ogni volta il puntatore e allocare una nuova memoria, ma non mi sono venute in mente alternative.

    So che sono domande stupide, sto seguendo un libro di C in inglese e l'esempio fra l'altro era lì scritto come l'ho eseguito io, a quanto pare ci sono degli errori

    grazie
  • Re: Problema con array di puntatori

    Puo' capitare che un libro contenga errori. Personalmente ne ho trovati parecchi il primo nel 1986 sul libro di Peter Norton Guida del programmatore - notificato e corretto nelle edizioni successive -

    Fonte:
    Knuth paga un premio di 2.56 dollari per ogni errore scoperto nei suoi libri, perchè "256 penny sono un dollaro esadecimale"
Devi accedere o registrarti per scrivere nel forum
3 risposte