Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C]

    Ciao ragazzi.

    Dopo molto tempo lontano dal C mi sono rimesso ad utilizzarlo per
    scrivere Plugin per altre piattaforme di sviluppo ma ho subito
    incontrato un problema: voglio banalmente costruire un Array di
    stringhe contenente un range di indirizzi IP (tipicamente da 1 a 255) a partire da un indirizzo IP passato alla funzione.

    Più o meno in questo modo

    Ammettiamo di passare l'indirizzo in questo modo
    Local_Host_It = "192.168.1."


    for ( i = 1, i < 255, i++) {

    itoa( i, str, 10 );
    strcpy( Local_Host_IP1, Local_Host_IP);
    strcat( Local_Host_IP1, str );

    Assegnando il valore di Local_Host_IP1 (formato da Local_Host_IP
    + ( 1 < i < 255 )) agli elementi di un array (o di una struttura, o di un Array costruito con le API della piattaforma per la quale sto scrivendo il Plugin) ottengo che yutti gli elementi dell'array hanno lo stesso valore: il valore che assume Local_Host_IP1
    nell'ultimo ciclo. Essendo gli elementi dell'array (char *) puntantori alla variabile non mantengono il valore della stessa nel momento in cui gli viene assegnata.

    }

    1. Mi sono spiegato?
    2. Come posso ovviare al problema?
    3. Ho sbagliato completamente approccio?
    4. Consigli?

    Grazie

  2. #2

    Re: [C]

    Originariamente inviato da artedelcorpo
    Ciao ragazzi.

    Dopo molto tempo lontano dal C mi sono rimesso ad utilizzarlo per
    scrivere Plugin per altre piattaforme di sviluppo ma ho subito
    incontrato un problema: voglio banalmente costruire un Array di
    stringhe contenente un range di indirizzi IP (tipicamente da 1 a 255) a partire da un indirizzo IP passato alla funzione.

    Più o meno in questo modo

    Ammettiamo di passare l'indirizzo in questo modo
    Local_Host_It = "192.168.1."


    for ( i = 1, i < 255, i++) {

    itoa( i, str, 10 );
    strcpy( Local_Host_IP1, Local_Host_IP);
    strcat( Local_Host_IP1, str );

    Assegnando il valore di Local_Host_IP1 (formato da Local_Host_IP
    + ( 1 < i < 255 )) agli elementi di un array (o di una struttura, o di un Array costruito con le API della piattaforma per la quale sto scrivendo il Plugin) ottengo che yutti gli elementi dell'array hanno lo stesso valore: il valore che assume Local_Host_IP1
    nell'ultimo ciclo. Essendo gli elementi dell'array (char *) puntantori alla variabile non mantengono il valore della stessa nel momento in cui gli viene assegnata.

    }

    1. Mi sono spiegato?
    2. Come posso ovviare al problema?
    3. Ho sbagliato completamente approccio?
    4. Consigli?

    Grazie
    1)Fai un esempio concreto di input ed output della funzione
    2)Posta più codice

    Ovviamente se ne riparla dopo capodanno Buona anno!
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    in realtà il problema può essere riassunto anche in modo più astratto: come popolare un array con valori stringa da "1" a "254"?

    per quanto concerne il caso specifico invece...

    l'input potrebbe essere "192.168.1." oppure "10.0.0."

    e l'output dovrebbe essere qualcosa tipo

    Ipotetico_Array[1] = "192.168.1.1"
    Ipotetico_Array[2] = "192.168.1.2"
    Ipotetico_Array[3] = "192.168.1.3"
    ...
    Ipotetico_Array[255] = "192.168.1.255"

    il codice non è molto più di questo (per il momento).
    il resto delle righe sono le API della piattaforma per cui pluggo.
    sto scrivendo una funzione complessa ma mi sono fermato subito con sta cosa delle stringhe/puntatori a stringhe.

    questo è il comando per scrivere gli elementi dell'array
    PA_SetStringInArray( Host_IP_Array, i, Local_Host_IP );
    parametri
    1 = PA_Variable Array
    2 = int indice
    3 = char* string

    spero di essere stato più chiaro.

    grazie di cuore e tantissimi auguri!!!

  4. #4
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    
    void PA_SetStringInArray( char** Host_IP_Array, int i, char* Local_Host_IP ); 
    char** generateIPs(char* inputMask);
    
    int main()
    {
    	char* inputMask = "192.168.1.";
    	char **Host_IP_Array = generateIPs(inputMask);
    	int i; 
    	
    	for(i = 0; i < 256; i++)
    		printf("%s\n",Host_IP_Array[i]);
    	fflush(stdin);
    	getchar();
    	return 0;
    }
    
    
    
    char** generateIPs(char* inputMask)
    {
    	int i;
    	char* str = (char*)malloc(4);
    	str[3] = '\0';
    	char* IP;
    	char** Host_IP_Array= (char**)malloc(256 * sizeof(char*));
    	for (i = 0 ; i < 256 ; i++ ) 
    	{
    		str = itoa(i,str,10);
    		IP = (char*)malloc(13);
    		IP[12] = '\0';
    		IP = strcpy(IP,inputMask);
    		strcat(IP,str); 
    		Host_IP_Array[i] = IP;
    	}
    	return Host_IP_Array;
    }
    Ciao questo codice assume che tu gli passi un indirizzo base del tipo "192.168.1.", se cambi ovviamnete va in crash o sbaglia. Cioè non puoi passargli qualcosa come "192.168.1" o "192.168.1.2". Chiaramente si può migliorare molto, soprattutto per quanto riguarda i controlli d'errore.
    Altre due osservazioni:
    -Siccome non so che tipo sia PA_Variable l'ho semplicemente ignorato ed ho lavorato con doppi puntatori a stringa semplicemente, quindi non ho avuto nisogno di richiamare PA_SetStringInArray, eventualmente modifica il codice-
    -Sei sicuro che i numeri che devi generare vadano da 1 a 254?Guarda che in un indirizzo IP valido ogni campo può avere valori da 0 a 255 (i valori codificabili con un byte).
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Grazie mille per la risp e complimenti per il code.

    I comandi PA_xxx fanno parte delle API dell'applicativo per il quale vado a scrivere il Plugin.

    Mi sono limitato a 254 perchè devo ottenere delle info dai vai Host e quindi il 255 non mi serve.

    Adatterò il code alla mia problematica e ti aggiornerò sugli esiti

    Grazie ancora e buona serata!

  6. #6
    Originariamente inviato da artedelcorpo
    Grazie mille per la risp e complimenti per il code.

    I comandi PA_xxx fanno parte delle API dell'applicativo per il quale vado a scrivere il Plugin.

    Mi sono limitato a 254 perchè devo ottenere delle info dai vai Host e quindi il 255 non mi serve.

    Adatterò il code alla mia problematica e ti aggiornerò sugli esiti

    Grazie ancora e buona serata!
    Aggiungi anche le free per liberare la memoria che non guasta.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.