Die Übung gibt ein einfaches Programm-Datenbanken zu erstellen, und dieses Programm dreht sich um die folgende StrukturC: Wie ändert man die maximale Größe eines Strings in einer Struktur?
struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};
ich gefragt werde, um den Code zu ändern, so kann ich die maximale Länge von .name
auf das Programm als Argument übergeben und . Nun, natürlich, wenn statt MAX_DATA
als ein Makro zu definieren, ich arbeite mit ihm als eine globale Variable, bekomme ich die Fehler: Variable geändert 'Name' bei Dateibereich.
Dann habe ich versucht, anders zu erstellen, wenn Schleifen durch den MAX_DATA Wert zu übergeben Ziel struct Address
neu zu definieren, zum Beispiel:
if(argc > 6) {
int maxdata = atoi(argv[6]);
struct Address {
int id;
int set;
char name[maxdata];
char email[maxdata];
};
DatabaseSet(conn, id, argv[4], argv[5]);
DatabaseWrite(conn);
break;
}
aber DatabaseSet
und DatabaseWrite
(die Arbeit an einem struct Connection
, die auf einem anderen struct Database
beziehen, die schließlich bezieht sich direkt auf struct Address
) ignorieren Sie die neuen Längen von name
und email
.
BEARBEITEN: DANKE.
Ihnen allen für Ihre Kommentare und Antworten danken, Ihr mir wirklich geholfen, die mit der Ausübung und mit meinem allgemeinen undestanding von C.
Sie können diese Art von Variabilität in der Struktur nicht so haben. Was Sie tun können, ist die dynamische Speicherzuweisung für die Zeichenfolgen ('malloc()' und friends; vielleicht 'strdup()') und Zeiger auf den dynamisch zugewiesenen Speicher ('char * name;') in der Struktur zu speichern. –
Wenn zum Zeitpunkt der Kompilierung keine Beschränkung für die Länge des Namens und der E-Mail-Adresse bekannt ist, können Sie diese Elemente nicht als Arrays deklarieren. Mache sie stattdessen zu Poitern. –
Abhängig von dem vollständigen Kontext, kann es sein, dass die "Pause" am Ende des "if" nicht notwendig ist. –