2011-07-17 3 views
2

J'ai déjà une fonction pour obtenir sous-chaîne d'une chaînese substring dans c

void subString(char* buffer, char* str, int start, int length) 
{ 
    int i, x = 0; 
    int end=start+length; 
    for(i = start ; i <= end; i++) 
     buffer[x++] = str[i]; 
    buffer[x] = '\0'; 

    //return temp; 
} 

nouvelle chaîne est stockée dans un tampon

mais je préfère la fonction aime

char * subString(char* str, int start, int length) 
{ 

    //....... 

} 

il sera renvoie automatiquement le pointeur de chaîne qui a été alloué de la mémoire.

Bienvenue tout commentaire

+2

Et la question est ...? –

+0

votre 'i <= (début + longueur)' est sospicieux (faux), par ex. "HELLO" avec start = 0 et length = 2 devrait choisir HE mais je vais de 0 à 2 inclus, c'est-à-dire, il faut "HEL" – ShinTakezou

+0

Je pensais que la question portait sur les avantages et les inconvénients des deux prototypes de fonctions, mais les réponses ci-dessous fournissent une implémentation pour le second à la place. Ce n'est vraiment pas clair ce qui est demandé. Voter pour fermer. –

Répondre

3

Quel est le problème avec juste ajouter le malloc dans votre nouvelle fonction et laisser le reste le même?

#include<stdlib.h> 
char * subString(char* str, int start, int length) { 
    char *newString = (char *)malloc(length * sizeof(char)); 
    int i, x = 0; 
    int end=start+length; 
    for(i = start ; i <= end; i++) 
     newString[x++] = str[i]; 
    newString[x] = '\0'; 
    return newString; 
} 
+0

Bien, mais ne lancez pas la valeur de retour de 'malloc' et ne prenez pas la taille de' char' :-) – cnicutar

+0

Pourquoi pas? Être explicite ne réduit pas la clarté de l'énoncé et renforce l'utilisation correcte de 'malloc'. –

+0

@cnicutar - Je vois que le sujet a été fermé, mais je ne suis pas pourquoi je ne lancerais pas 'malloc' ou n'utiliserait pas' sizeof (char) '? Sans lancer 'gcc', vous obtenez un avertissement (définition implicite incompatible de malloc) et sans sizeof, vous pouvez obtenir une taille de char différente en fonction de l'architecture (même si je suis d'accord que sizeof (char) est presque toujours 1). –

1

Puisque vous traitez des chaînes comme de simples tableaux de caractères, pourquoi ne pas utiliser simplement vous simplement vieux strncpy?

strncpy(dest, str+offset, len);