Domanda

C'è una funzione C che fa la stessa cosa come raw_input in Python?

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

Come posso scrivere qualcosa di simile in C?

Aggiornamento ::

Faccio questo, ma ottengo un errore ::

#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;
}

e l'errore è che l'esecuzione del programma e stampare il msg, e prendere ciò che tipo di utente da scanf, ma poi si blocca e uscire .. ??

È stato utile?

Soluzione

È possibile scrivere uno abbastanza facilmente, ma ti consigliamo di stare attenti a buffer overflow:

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

Quindi utilizzare in questo modo:

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

Si consiglia di aggiungere un po 'il controllo degli errori, e così via.

Altri suggerimenti

Il POSIX.1-2008 standard specifica la funzione getline , che dinamicamente (ri) allocare memoria per fare spazio per una linea di lunghezza arbitraria.

Questo ha il vantaggio nel gets di essere invulnerabile a traboccare un buffer fisso, e il vantaggio nel fgets di poter gestire linee di qualsiasi lunghezza, a scapito di essere un potenziale DoS se la lunghezza della linea è più lunga mucchio disponibile spazio.

Prima di POSIX 2008 supportano, Glibc esposto questo come un'estensione GNU pure.

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

Ricordate di free(line) dopo aver finito con esso.


Per leggere in un buffer di dimensioni fisse, utilizzare fgets o scanf("%*c") o simili; questo consente di specificare un numero massimo di caratteri per la scansione, per evitare traboccare un buffer fisso. (Non v'è alcun motivo per usare mai gets, non è sicuro!)

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 */

Utilizza printf per stampare il prompt, quindi utilizzare fgets a leggere la risposta.

La risposta selezionata sembra complessa per me.

Penso che questo sia più facile:

#include "stdio.h"

int main()
{
   char array[100];

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

   return 0;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top