2016-09-21 2 views
-2

Ich versuche, eine Zeichenfolge in Slice zu schneiden und dieses neue geschnittene Teil zu kopieren.Schneiden und Kopieren einer Zeichenfolge in C

char* makeWord(char *c, int j, int i){ 

    char *s; 
    s = malloc(sizeof(char)*i-j) 
    int k; 
    for (k = 0; k < i - j; k++){ 
     s[k] = c[j+k]; 
    } 

    printf("%s ", s); 

    return s; 
} 

Ich versuche, einen Zeiger zurückzugeben, der den relevanten Teil der ursprünglichen Zeichenfolge kopiert.

Es ist am Ende seltsame Symbole drucken.

Beispiel:

c[] = "hello darkness my old friend" 
makeWord(c, 0, 5); makeWord(c, 6,14); makeWord(c, 15, 17); makeWord(c, 18, 21); 

Generiert: hallo darknessmt_'3 Myp alt friendP

Danke, sorry für den Neuling Frage.

+3

Was Strings mit enden? Dein 's' fehlt etwas. – user2357112

+2

'sizeof (char)' ist redundant, da es immer eine –

+1

ist, die sinnvollere Variablennamen als 'i' und' j' verwenden. –

Antwort

1

Eine gültige Zeichenfolge in C erfordert einen Null-Terminator.

Sie müssen malloc() ein zusätzliches Byte, um es zu speichern, und schließen Sie Ihre Zeichenfolge mit einem \0 nach dem letzten Zeichen.

+0

Vielen Dank. –

0
  1. Wenn Sie einen String-Puffer zuweisen müssen n Zeichen zu halten, müssen Sie n+1 Zeichen, die zusätzliche eine für das abschließende Nullzeichen, '\0'. Denken Sie auch daran, dass Sie den Terminator selbst einstellen müssen.

  2. sizeof(char) ist immer 1 definiert durch den Standard.

Try this:

char* makeWord(char *c, int start, int end) { 

    char *s = malloc(end - start + 1); 
    if (!s) return NULL; 
    int k; 
    for (k = 0; k < end-start; k++){ 
     s[k] = c[start+k]; 
    } 
    s[k] = '\0'; 

    printf("%s ", s); 

    return s; 
} 
Verwandte Themen