Frage

Gibt es eine C-Funktion, die die gleichen wie raw_input in Python tut?

#in Python::
x = raw_input("Message Here:")

Wie kann ich schreiben, so etwas wie die in C?

Update ::

Ich mache das, aber ich erhalte eine Fehlermeldung ::

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

typedef char * string;

int raw_input(string msg);
string s;
string *d;

main(){
raw_input("Hello, Enter Your Name: ");
d = &s;
printf("Your Name Is: %s", s);

}

int raw_input(string msg){
string name;
printf("%s", msg);
scanf("%s", &name);
*d = name;
return 0;
}

und der Fehler ist, dass Programmablauf und die msg drucken, und nimmt, was den Benutzertyp von scanf, aber dann hängt und Ausgang .. ??

War es hilfreich?

Lösung

Sie können einen schreiben ziemlich leicht, aber Sie werden vorsichtig sein wollen, um Pufferüberläufe:

void raw_input(char *prompt, char *buffer, size_t length)
{
    printf("%s", prompt);
    fflush(stdout);
    fgets(buffer, length, stdin)
}

Dann verwenden Sie es wie folgt aus:

char x[MAX_INPUT_LENGTH];
raw_input("Message Here:", x, sizeof x);

Sie können einige Fehlerprüfung hinzuzufügen, und so weiter.

Andere Tipps

Die POSIX.1-2008 Norm legt die Funktion getline , die dynamisch wird (Re) für einen Zeilenspeicher, um Platz zuzuteilen von beliebige Länge.

Dies hat den Vorteil gegenüber gets von einem festen Puffer zum Bersten unverwundbar zu sein, und den Nutzen über fgets in der Lage, Linien beliebiger Länge zu handhaben, auf Kosten ein mögliche DoS zu sein, wenn die Leitungslänge ist länger als verfügbar Heap Raum.

Vor dem POSIX-2008 unterstützen, ausgesetzt Glibc dies als eine GNU-Erweiterung als auch.

char *input(const char *prompt, size_t *len) {
    char *line = NULL;
    if (prompt) {
        fputs(prompt, stdout);
        fflush(stdout);
    }
    getline(&line, len, stdin);
    return line;
}

Denken Sie daran, free(line), nachdem Sie mit ihm fertig sind.


Zum Lesen in einen Puffer fester Größe, Verwendung fgets oder scanf("%*c") oder ähnliches; dies ermöglicht es Ihnen, eine maximale Anzahl von Zeichen angeben, scannen einen festen Puffer zu verhindern, überfüllt. (Es gibt keinen Grund, jemals Gebrauch gets, ist es unsicher!)

char line[1024] = "";
scanf("%1023s", line);      /* scan until whitespace or no more space */
scanf("%1023[^\n]", line);  /* scan until newline or no more space */
fgets(line, 1024, stdin);   /* scan including newline or no more space */

Verwenden printf Ihre prompte zu drucken, dann verwenden Sie fgets zu lesen die Antwort.

Die gewählte Antwort erscheint mir komplex.

Ich denke, das ist etwas leichter:

#include "stdio.h"

int main()
{
   char array[100];

   printf("Type here: ");
   gets(array);
   printf("You said: %s\n", array);

   return 0;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top