2016-04-25 1 views
0

Ich versuche Code zu schreiben, der den Benutzer für eine Zeichenfolge auffordert, und dann die Zeichenfolge zu drucken. Anschließend wird die Funktion 'initialize' verwendet, um jeden Wert im Array auf 'a' zu setzen, mit Ausnahme des letzten Werts, der in '\ 0' geändert wird. Die aufrufende Funktion wird dann die aktualisierte Zeichenfolge drucken. HierProblem mit dem Ändern des Werts von Array in Funktion mit Zeiger

ist der Code, den ich habe:

#include <stdio.h> 
#include <string.h> 

void initialize(char (*firstString)[50]); 

void main(void) 
{ 
    char firstString[50]; 

    printf("Enter a string: "); 
    scanf("%s", firstString); 
    printf("%s", firstString); 
    initialize(&firstString); 
    printf("%s", firstString); 
} 

void 
initialize(char (*firstString)[50]) 
{ 
    int i; 
    for (i = 0; i < 50; i++) { 
     *firstString[i] = 'a'; 
     *firstString[49] = '\0'; 
    } 
} 

Jede Hilfe sehr geschätzt wird.

EDIT:

Hier ist der Arbeitscode. Danke für die Hilfe!

#include <stdio.h> 
#include <string.h> 

void initialize(char firstString[50]); 

void main(void) 
{ 
    char firstString[50]; 

    printf("Enter a string: "); 
    scanf("%s", firstString); 
    printf("%s", firstString); 
    initialize(firstString); 
    printf("%s", firstString); 
} 

void 
initialize(char firstString[50]) 
{ 
    int i; 
    for (i = 0; i < 50; i++) 
     memset(firstString, 'a', 49); 
    firstString[49] = '\0'; 
} 
+1

Sie sollten eine Warnung mit -Wall -Wextra bekommen, die Ihnen sagt, was das Problem ist. – 2501

+0

'* firstString [i]' und Priorität .... –

+0

* firstSring [i] ist ein ** Zeiger verwenden nur 1 Zeiger – Schafwolle

Antwort

2

[] hat eine höhere Priorität als * so *firstString[x] als *(firstString[x]) analysiert wird. Siehe C Operator Precedence .

Sie müssen also (*firstString)[x] schreiben, um die richtige Priorität zu erhalten.

Auch könnte Ihre Funktion geschrieben werden einfach als:

void 
initialize(char (*firstString)[50]) 
{ 
    memset(firstString, 'a', 49); 
    (*firstString)[49] = '\0'; 
}