2016-04-11 1 views
0

Ich versuche zu ändern und dann ein Array in C oder mindestens das erste Zeichen zu drucken. Wenn ich das Array deklariere, funktioniert es. Wenn ich es in eine andere Lücke sende, wird es ebenfalls korrekt ausgedruckt. Wenn ich jedoch versuche, es zu ändern, gibt es einen falschen Wert zurück. Dies ist der Code, den ich bisher habe ..Drucken eines Arrays in C

int main (void) { 
    char value[] = "Halleluja"; 

    printf("The value is: %c\n", *value); 
    printValue(value); 
    printf("\nSecond value is: %c", *value); 

    return 0; 
} 

void printValue(char *test[]) { 

    printf("Before changing: %c", *test); 

    *test = "G"; 
} 

Auch, wie würde ich in der Lage sein, die Zeichenfolge als% s drucken oder ohne durch die Anordnung von Zeichen zu Schleife. Wie wäre es, wenn ich die "Halleluja" Saite in "Sandals" ändern wollte.

Vielen Dank im Voraus!

+2

Was ist alle leeren Zeilen? –

+1

"G" ist kein Zeichen –

+0

Was erwarten Sie '* test =" G "; zu tun? Was bedeutet es, ein Zeichen gleich einer Zeichenkette zu setzen? –

Antwort

0

einige Probleme:

  1. Diese:

    void printValue(char *test[]) { 
    

    sollte sei

    void printValue(char *test) { 
    

    weil value ist (nach dem Zerfall) ein char*, kein char**.

  2. Dieses:

    *test = "G"; 
    

    sollte

    *test = 'G'; 
    

    sein, weil "G" ein Zeichenfolgenliteral ist, aber Sie wollen die Zeichenliteral 'G'.

was ist, wenn ich das "Halleluja" String "Sandalen"

Über die eingebaute Standardbibliotheksfunktion strcpy von string.h ändern wollte: mit

strcpy(value, "Sandals"); 
+0

Sie hatten Recht. * Test sollte so bleiben wie er war. Außerdem verstehe ich nun, was ich falsch gemacht habe, von String-Literal zu Charakter. Danke, Mann. – WeTheFuzz

+0

Auch, wie würde ich von diesem gehen: printf ("\ nZweite Wert ist:% c", * Wert); to printf ("\ nZweiter Wert ist:% s", * Wert); und die ganze Zeichenfolge ausdrucken? – WeTheFuzz

+0

'printf (" \ nZweite Wert ist:% s ", Wert);' –

2

ändern

void printValue(char *test[]) 

zu

void printValue(char *test) 

*test[] ist ein Array von Zeigern, aber Sie müssen tatsächlich einen Zeiger hier, da Sie nur einen String übergeben werden.

ändern

*test = "G"; 

zu

test = "G"; 

Aber gesagt haben, dass Ihr Stück Code mehrere Probleme hat jetzt zwar syntaktisch alles in Ordnung ist.

Wenn ich nicht irre, möchten Sie eigentlich den Inhalt der array mit einem Zeiger ändern. Das ist nicht möglich.

Wenn Sie das tun

test = "Sandals"; 

test wird einfach auf einen Teil des Speichers Punkt gemacht, die „Sandalen“ speichern gewidmet ist. Sichere Weg, um den Wert von value zu ändern ist:

strncpy_s(array, sizeof(array), "Sandals", _TRUNCATE); 

Oben ist das gleiche wie:

strncpy_s(array, sizeof(array), "Sandals", sizeof(array)-1); 
+0

Hat dies getan und es wird immer noch ein zufälliges Zeichen im Speicher ausgegeben. In meinem Fall Kleinbuchstaben f – WeTheFuzz

+0

Hat die zweite Bearbeitung auch? wie? – sjsam

+0

Jetzt ist es! Aber das hat mich verwirrt. Solltest du den * Test (was immer an der Speicheradresse des Tests ist) anstelle des Tests ändern (Zeiger auf diese Adresse?) – WeTheFuzz