Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C]appendere un carattere all'inizio di una stringa

    Salve a tutti ,
    mi pare che il titolo si spieghi da solo. Ho la necessità di aggiungere un carattere in testa ad una stringa. Esiste una funzione di libreria predefinita?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    strcat
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    avevo provato una cosa del genere:

    codice:
    char c[] = "/";
    
    string = strcat (c, string);
    peccato debba appendere di tanto in tanto il carattere "/" e con la prima chiamata a strcat c a quel punto non contiene più solo "/". Potrei risettare c perché sia "/" dopo ogni chiamata, ma non mi sembra il massimo della pulizia.

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Se la stringa ha memoria sufficiente allocata puoi anche fare:
    codice:
    int l=strlen(string);
    string[l]=c;
    string[l+1]=0;

  5. #5
    codice:
    char *appendBefore(char *strSrcBuffer, char *strToAppend)
    {
        unsigned int iSrcBufferLen = 0;
        unsigned int iStrToAppendLen = 0;
        char *strOutBuffer = NULL;
    
        if ( NULL == strSrcBuffer) return NULL;
        if ( NULL == strToAppend) return NULL;
    
        iSrcBufferLen = strlen(strSrcBuffer);
        iStrToAppendLen = strlen(strToAppend);
    
        strOutBuffer = (char *)malloc((iSrcBufferLen + iStrToAppendLen + 1)*sizeof(char));
        if ( NULL == strOutBuffer ) return NULL;
    
        strcpy(strOutBuffer, strToAppend);
        strcpy(strOutBuffer+iStrToAppendLen, strSrcBuffer);
        strOutBuffer[iSrcBufferLen+iStrToAppendLen] = '\0';
    
        return strOutBuffer;
    }
    
    int main(void)
    {
       char *slash = "/";
       char *tmp = "la mia stringa";
       
       char *result = appendBefore(tmp, slash);
    
    }
    hai provato con qualcosa di questo tipo?

    ps. l'ho scritta al volo, potrebbe essermi sfuggito qualcosa.
    Administrator of NAMDesign.Net

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Frank Lioty
    avevo provato una cosa del genere:

    codice:
    char c[] = "/";
    
    string = strcat (c, string);
    peccato debba appendere di tanto in tanto il carattere "/" e con la prima chiamata a strcat c a quel punto non contiene più solo "/". Potrei risettare c perché sia "/" dopo ogni chiamata, ma non mi sembra il massimo della pulizia.
    Non ho mica capito qual è il problema ...

    Se scrivi

    codice:
    	strcpy(dest, "\\");
    	strcat(dest, string);
    non risolvi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quello risolverebbe il problema del carattere divisore in effetti. Il problema è che devo fare una cosa di questo tipo:

    codice:
    char *string1 = "primo"
    char *string2 = "secondo"
    char *string3 = "terzo"
    char *string4 = "quarto"
    e partendo da string4, andando a ritroso, dovrei costruire la stringa:

    codice:
    primo\secondo\terzo\quarto

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai provato ad usare sprintf?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    ripeto:

    codice:
    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    
    char *appendBefore(char *strSrcBuffer, char *strToAppend)
    {
        unsigned int iSrcBufferLen = 0;
        unsigned int iStrToAppendLen = 0;
        char *strOutBuffer = NULL;
    
        if ( NULL == strSrcBuffer) return NULL;
        if ( NULL == strToAppend) return NULL;
    
        iSrcBufferLen = strlen(strSrcBuffer);
        iStrToAppendLen = strlen(strToAppend);
    
        strOutBuffer = (char *)malloc((iSrcBufferLen + iStrToAppendLen + 1)*sizeof(char));
        if ( NULL == strOutBuffer ) return NULL;
    
        strcpy(strOutBuffer, strToAppend);
        strcpy(strOutBuffer+iStrToAppendLen, strSrcBuffer);
        strOutBuffer[iSrcBufferLen+iStrToAppendLen] = '\0';
    
        return strOutBuffer;
    }
    
    int main(void)
    {
      char *slash = "/";
      char *tmp1 = "prima";
      char *tmp2 = "seconda";
      char *tmp3 = "terza";
      char *tmp4 = "quarta";
       
      char *result = appendBefore(tmp4, slash);
      result = appendBefore(result, tmp3);
      result = appendBefore(result, slash);
      result = appendBefore(result, tmp2);
      result = appendBefore(result, slash);
      result = appendBefore(result, tmp1);
    
      printf(result);
    }
    Administrator of NAMDesign.Net

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Frank Lioty
    Quello risolverebbe il problema del carattere divisore in effetti. Il problema è che devo fare una cosa di questo tipo:

    codice:
    char *string1 = "primo"
    char *string2 = "secondo"
    char *string3 = "terzo"
    char *string4 = "quarto"
    e partendo da string4, andando a ritroso, dovrei costruire la stringa:

    codice:
    primo\secondo\terzo\quarto
    Questo diventa un altro problema e la cosa migliore - come ti ha suggerito Alex - è usare la sprintf (o meglio, per sicurezza, la snprintf)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.