Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] puntatori

  1. #1

    [C] puntatori

    Ciao,
    ho questa porzione di codice

    codice:
    if(string1 != NULL)
    		{
    			tmp = string;
    
    			while(tmp == string)
    				string = strstr(string1, string2);
    		}
    tmp e string sono entrambi dei puntatori a char.

    Nel caso in cui la prima occorrenza di string2 in string1 sia il primo carattere di string1 allora vorrei invocare nuovamente la strstr() e a tal proposito ho dichiarato tmp come puntatore a char e l'ho inizializzato con il valore di string.
    Durante il debug posso vedere che l'indirizzo puntato da tmp e quello puntato da string sono diversi, dopo l'invocazione della strstr() eppure il codice continua a ciclare.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466

    Re: [C] puntatori

    Originariamente inviato da Satsuki Kenbu
    codice:
    tmp = string;
    Puntano allo stesso indirizzo di memoria.

  3. #3
    Mi era venuto il dubbio che tmp puntasse a string e non all'indirizzo puntato da string, allora ho fatto questa prova e a video riesco a vedere che i due indirizzi sono effettivamente diversi.

    codice:
    char *string = "Test";
    char *tmp = string;
    
    string = &string[1];
    
    printf("%p\n%p", string, tmp);
    	
    getchar();
    	
    return 0;
    Forse mi sfugge qualcosa?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Satsuki Kenbu
    Forse mi sfugge qualcosa?
    Ti sfugge che &string[1] non è l'indirizzo di base della stringa, ma quello del secondo carattere perché l'indirizzo di base sarebbe &string[0] o anche semplicemente string.
    every day above ground is a good one

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da Satsuki Kenbu
    Forse mi sfugge qualcosa?
    Si.
    codice:
    string = &string[1];
    codice:
    #include <stdio.h>
    
    int main()
    {
    	char *string = "Test", *tmp = string;
    
    	printf("string\t%p\ntmp\t%p\n", string, tmp);
    	return 0;
    }
    Output:
    codice:
    string   0x8048460
    tmp      0x8048460

  6. #6
    Scusatemi, ma non capisco.
    So benissimo che &string[1] è l'indirizzo del secondo carattere della stringa ma infatti la mia intenzione era quella di modificare l'indirizzo puntato da string e constatare tramite la printf che l'indirizzo puntato da tmp e quello puntato da string fossero diversi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da Satsuki Kenbu
    Scusatemi, ma non capisco.
    So benissimo che ...
    E allora perchè te ne chiedi il motivo?
    Infine, qual è il tuo problema???

  8. #8
    Ho risolto, grazie di tutto comunque!

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.