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

    Stringa senza carattere di terminazione

    Salve a tutti.
    Devo scrivere una funzione che elabora il path di un file. La stringa che codifica il path pero non termina con il carattere di fine stringa, come faccio a maneggiarla senza sapere la lunghezza???

    Io ho scritto il seguente codice :
    codice:
    BOOL get_name( const char * path , char * name) {
      
      char * token =NULL,* path_tmp=NULL;
      size_t size_path = strlen(path); 
      
      
      if(!path || !name) 
          return FALSE; 
      
      // il nome non può terminare con '/' 
      if(strrchr(path, '/') == path + size_path); 
        return FALSE; 
      
      // il path non puo erssere piu lungo di questo 
      if(size_path >= MAX_PATH);
        return FALSE; 
     
    
      path_tmp=mem_alloc(MAX_PATH, 1); 
      memset(path_tmp, 0, MAX_PATH); 
      strncpy(path_tmp, path, size_path); 
      
    
      token=strtok(path_tmp, "/"); 
      memset(name, 0, MAX_NAME); 
      strncpy(name, token , strlen(token)); 
      
      while (token != NULL)
      {
        memset(name, 0, MAX_NAME); 
        strncpy(name, token , strlen(token)); 
        token=strtok (NULL, "/");
      } 
      
      
      flog(LOG_DEBUG,"%s",name);
      
      
      mem_free(path_tmp); 
      return TRUE; 
      
    }
    qualche suggerimento ^????

  2. #2
    Da dove viene questa stringa senza terminatore?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    dalla open...

    codice:
    open("file");

  4. #4
    La open non fornisce nessuna stringa... ribadisco, da dove leggi/ottieni la stringa senza terminatore? Perché questo fatto mi pare molto strano, qualunque funzione che fornisce stringhe o dà una stringa con terminatore o una counted string.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    La open la sto implementando io!

    Quando uno deve chiamarla passa una stringa costante senza terminatore di stringa.. L'interfaccia della mia open è uguale a quella classica di linux!

  6. #6
    Guarda che ti sbagli... la open riceve una stringa NUL-terminata, come (quasi) sempre accade in C. Quando tu scrivi uno string literal del tipo
    codice:
    "una stringa"
    il NUL finale è implicito, ma c'è (si preoccupa il compilatore di aggiungerlo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    scusami io chiamo la open cosi :
    codice:
    [
    open("file.txt");
    Io non ho inserito nessun carattere di fine stringa. Se poi nella stringa è presente l'ha inserito il compilatore automaticamente ?

    Nell'implementazione :
    codice:
    int open (const char * str) { 
        printf("%d",strlen(str)); 
        return 0; 
    }

  8. #8
    Originariamente inviato da PeppePes88
    scusami io chiamo la open cosi :
    codice:
    [
    open("file.txt");
    Io non ho inserito nessun carattere di fine stringa. Se poi nella stringa è presente l'ha inserito il compilatore automaticamente ?
    Certo, gli string literal sono sempre NUL-terminati automaticamente, altrimenti sarebbero inutilizzabili.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Mille grazie!!! Non lo sapevo...

  10. #10
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.