Gibt es in der Sprache “C” eine Möglichkeit, den Inhalt einer Struktur zu drucken, so etwas wie
ex: print (T_THREAD) und Ausgabe sollte wie sein
Contents of a structure T_THREAD are
thread_id
is_valid
Möchten Sie die Werte einer bestimmten Instanz oder das Layout der allgemeinen Struktur drucken? (Obwohl die Antwort nein ist, müssen Sie es selbst tun)
– Benutzer45891
23. Dezember 2016 um 16:06 Uhr
Ich möchte das Layout der allgemeinen Struktur drucken. Wenn ich der Struktur weitere Felder hinzufüge, sollte mein printf auch das neu hinzugefügte Feld drucken können.
– Benutzer3555115
23. Dezember 2016 um 16:09 Uhr
Was Sie suchen, ist Reflexion. Java und andere virtuelle Sprachen haben Reflektion, sodass Sie die Variablennamen und Funktionsnamen für jede beliebige Klasse ausdrucken können. Weil der Compiler diese Reflection-Funktionen automatisch baut.
C hat keine Reflexion. Sie müssen alles manuell tun.
Falke
Was Ihre Struktur betrifft, würde die Funktion ungefähr so aussehen.
// st_name is the name of the struct
void print(T_THREAD *st, const char *st_name)
{
printf("Contents of structure %s are %lu, %d\n", st_name, st->thread_id, st->is_valid);
}
struct *st ? Es sollte sein T_THREAD *st. Und wenn Sie das ändern, ist das offensichtlich st_name ist nicht nötig
– Ingo Leonhardt
23. Dezember 2016 um 17:07 Uhr
Wie sollen wir drucken, wenn wir die Elemente der Struktur nicht kennen?
– vineeshvs
10. August 2019 um 10:20 Uhr
Sourav Ghosh
Nein, es gibt kein Standard/vordefiniert Weise zu erreichen, was Sie wollen.
Ja, aber Sie können Ihre eigene Funktion schreiben, die Kenntnisse über das Besondere hat Strukturelementwerte gedruckt werden, und dann können Sie mit einem einzigen Aufruf der Funktion mit einer bestimmten Instanz der Strukturvariablen alle Werte aller Elemente drucken lassen. Etwas wie
T_THREAD var;
my_print(var); //my_print() is the function you'll roll out
sollte in der Lage sein, die Werte zu drucken.
Bitte beachten Sie dies jedoch nicht erlauben Ihnen, die Variable zu drucken Namen in keiner Weise nur “Werte”.
RoadRunner
Es gibt keine Möglichkeit, alle Strukturelemente mit einem einzigen zu drucken printf Aussage. In C müssen Sie sie alle manuell ausdrucken. Hier ist ein Beispiel für das Erstellen von zwei Strukturmitgliedern und deren Ausdruck:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
char *name;
int thread_id;
bool is_valid;
}T_THREAD;
int
main(void) {
T_THREAD T1 = {"T1", 123, 1};
T_THREAD T2 = {"T2", 456, 0};
printf("\nContents of a structure %s are:\n", T1.name);
printf("thread_id: %d\n",T1.thread_id);
printf("is_valid: %d\n", T1.is_valid);
printf("\nContents of a structure %s are:\n", T2.name);
printf("thread_id: %d\n",T2.thread_id);
printf("is_valid: %d\n", T2.is_valid);
return 0;
}
Ausgabe:
Contents of a structure T1 are:
thread_id: 123
is_valid: 1
Contents of a structure T2 are:
thread_id: 456
is_valid: 0
Alternativ können Sie auch eine Funktion erstellen, um dies zu tun:
Eine Möglichkeit, dies zu tun, wäre die Verwendung von x-Makros. Obwohl nicht so hübsch im Vergleich zu Reflexionen, die in eine Sprache eingebaut sind. Die Verwendung von Makros macht den Code etwas schwieriger zu lesen, aber es ist ziemlich einfach.
Eine andere Methode, bei der die Reihenfolge des Felds nicht so wichtig ist, wäre die folgende, die eine Struktur verwendet und die Struktur initialisiert.
Möchten Sie die Werte einer bestimmten Instanz oder das Layout der allgemeinen Struktur drucken? (Obwohl die Antwort nein ist, müssen Sie es selbst tun)
– Benutzer45891
23. Dezember 2016 um 16:06 Uhr
Ich möchte das Layout der allgemeinen Struktur drucken. Wenn ich der Struktur weitere Felder hinzufüge, sollte mein printf auch das neu hinzugefügte Feld drucken können.
– Benutzer3555115
23. Dezember 2016 um 16:09 Uhr