3 Stimmen

C String ist in einer Funktion korrekt, in der anderen wird Müll entsorgt

Dies ist mein Code

#include <stdio.h>

void abc(char *text);

int main(void)
{
    char text[20];
    abc(text);
    printf("text in main : %s\n",text);
    return 0;
}

void abc(char *text)
{
    text = "abc";
    printf("text in abc function : %s\n",text);
}

Und das ist der Output.

text in abc function : abc
text in main :  

Meine Fragen sind:

  1. Warum ist die Textvariable in der Hauptfunktion und in der abc Funktion nicht die gleiche ist?
  2. Ich versuche, auf die Verwendung von scanf dans le abc Funktion und es funktioniert! es sind die gleichen. Warum?
  3. Wie man den Code ändert, damit er funktioniert. Ich meine aus Frage 1, dass die Hauptfunktion und die abc-Funktion die gleichen sind?

13voto

Wenn Sie die Funktion aufrufen:

 abc(text);

eine Kopie des Zeigers text erstellt, und dieser Zeiger ist derjenige, der in der Funktion abc() . Wenn Sie also sagen:

text = "abc";

Sie ändern die Kopie, nicht die Kopie in main .

Außerdem können Sie in C im Allgemeinen keine Zeichenketten zuweisen - Sie müssen Bibliotheksfunktionen wie strcpy() stattdessen. Damit Ihr Code funktioniert, müssen Sie ihn ändern:

 text = "abc";

zu:

 strcpy( text, "abc" );

-3voto

Master C Punkte 1536

Sie können nicht einfach printf("text in main : %s\n",text); in C keine Bedeutung hat, können Sie entweder eine Funktion wie strcpy() die jedes Zeichen und sie zu organisieren, um ein Zeichenfolge ! oder eine reguläre for-Schleife und lassen Sie sie über das gesamte Array laufen und drucken Sie die Organe ohne Leerzeichen aus.

int i;
for (i=0 ; i<strlength(text);i++)
{
    printf ("%d",text[i]);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X