Wenn ich nicht weiß, wie lang das Wort ist, kann ich nicht char m[6];
schreiben,
Die Länge des Wortes ist vielleicht zehn oder zwanzig lang.
Wie kann ich scanf
verwenden, um Eingaben von der Tastatur zu erhalten?
#include <stdio.h>
int main(void)
{
char m[6];
printf("please input a string with length=5\n");
scanf("%s",&m);
printf("this is the string: %s\n", m);
return 0;
}
bitte eine Zeichenkette mit lenght=5 eingeben hallo dies ist die Zeichenkette: hello
Bei dynamischer Sicherung eines Bereichs eintreten
Z.B..
#include <stdio.h>
#include <stdlib.h>
char *inputString(FILE* fp, size_t size){
//The size is extended by the input with the value of the provisional
char *str;
int ch;
size_t len = 0;
str = realloc(NULL, sizeof(char)*size);//size is start size
if(!str)return str;
while(EOF!=(ch=fgetc(fp)) && ch != '\n'){
str[len++]=ch;
if(len==size){
str = realloc(str, sizeof(char)*(size+=16));
if(!str)return str;
}
}
str[len++]='\0';
return realloc(str, sizeof(char)*len);
}
int main(void){
char *m;
printf("input string : ");
m = inputString(stdin, 10);
printf("%s\n", m);
free(m);
return 0;
}
Wenn ich einen sichereren Ansatz vorschlagen darf:
Deklarieren Sie einen Puffer, der groß genug ist, um die Zeichenkette aufzunehmen:
char user_input[255];
Holen Sie die Benutzereingabe auf sichere Weise:
fgets(user_input, 255, stdin);
Das erste Argument ist ein Zeiger auf einen Puffer, in dem die Eingabe gespeichert wird, das zweite die maximale Eingabe, die die Funktion lesen soll, und das dritte ist ein Zeiger auf die Standardeingabe - d.h. woher die Benutzereingabe kommt.
Die Sicherheit ergibt sich insbesondere aus dem zweiten Argument, das begrenzt, wie viel gelesen werden soll, was Pufferüberläufe verhindert. Außerdem kümmert sich fgets
um die Nullterminierung der verarbeiteten Zeichenkette.
Mehr Informationen über diese Funktion hier.
EDIT: Wenn Sie eine Formatierung vornehmen müssen (z.B. eine Zeichenkette in eine Zahl umwandeln), können Sie atoi verwenden, sobald Sie die Eingabe haben.
Wenn Sie eine Vorstellung von der möglichen Größe der Zeichenkette haben, verwenden Sie die Funktion
char *fgets (char *str, int size, FILE* file);`
Andernfalls können Sie auch zur Laufzeit Speicher zuweisen, indem Sie die Funktion malloc() verwenden, die dynamisch den gewünschten Speicher bereitstellt.