<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[struct mit char[] einlesen]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Programm lässt sich ganz normal kompilieren.<br />
sobald ich es aber ausführe, bricht es nach Eingabe meiner Werte mit einem Fehler ab; beim Fehler steht jedoch keine Fehlerbeschreibung; nur</p>
<p>AppName: main.exe AppVer: 0.0.0.0 ModName: msvcrt.dll<br />
ModVer: 7.0.2600.5512 Offset: 000360c1</p>
<p>so: hier mein Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Person
{
	char vorname[30];
	char nachname[30];
};

Person* neue_person(char vorname[30], char nachname[30])
{
	Person* p;
	strcpy(p-&gt;vorname, vorname);
	strcpy(p-&gt;nachname, nachname);
	return p;
}

Person* person_einlesen()
{
	char vorname[30];
	char nachname[30];
	cout &lt;&lt; &quot;Vorname: &quot;;
	cin &gt;&gt; vorname;
	cout &lt;&lt; &quot;Nachname: &quot;;
	cin &gt;&gt; nachname;
	Person* p = neue_person(vorname, nachname);
	return p;
}

void person_ausgeben(Person* p)
{
	printf(&quot;person_ausgeben():\n&quot;);
	printf(&quot;%s\n&quot;, p-&gt;vorname);
	printf(&quot;%s\n&quot;, p-&gt;nachname);
}

int main()
{
	struct Person* p = person_einlesen();
	person_ausgeben(p);
}
</code></pre>
<p>weiß irgendwer, wie ich das umschreiben muss, damit es funktioniert?</p>
<p>lg, guni</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254916/struct-mit-char-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 09:20:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254916.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Nov 2009 09:25:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 09:25:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Programm lässt sich ganz normal kompilieren.<br />
sobald ich es aber ausführe, bricht es nach Eingabe meiner Werte mit einem Fehler ab; beim Fehler steht jedoch keine Fehlerbeschreibung; nur</p>
<p>AppName: main.exe AppVer: 0.0.0.0 ModName: msvcrt.dll<br />
ModVer: 7.0.2600.5512 Offset: 000360c1</p>
<p>so: hier mein Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Person
{
	char vorname[30];
	char nachname[30];
};

Person* neue_person(char vorname[30], char nachname[30])
{
	Person* p;
	strcpy(p-&gt;vorname, vorname);
	strcpy(p-&gt;nachname, nachname);
	return p;
}

Person* person_einlesen()
{
	char vorname[30];
	char nachname[30];
	cout &lt;&lt; &quot;Vorname: &quot;;
	cin &gt;&gt; vorname;
	cout &lt;&lt; &quot;Nachname: &quot;;
	cin &gt;&gt; nachname;
	Person* p = neue_person(vorname, nachname);
	return p;
}

void person_ausgeben(Person* p)
{
	printf(&quot;person_ausgeben():\n&quot;);
	printf(&quot;%s\n&quot;, p-&gt;vorname);
	printf(&quot;%s\n&quot;, p-&gt;nachname);
}

int main()
{
	struct Person* p = person_einlesen();
	person_ausgeben(p);
}
</code></pre>
<p>weiß irgendwer, wie ich das umschreiben muss, damit es funktioniert?</p>
<p>lg, guni</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812142</guid><dc:creator><![CDATA[guni]]></dc:creator><pubDate>Mon, 23 Nov 2009 09:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 09:44:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt; 
using namespace std; 

struct Person 
{ 
    char vorname[30]; // Lieber std::string
    char nachname[30]; // Dito
}; 

Person* neue_person(char *vorname, char *nachname) 
{ 
    Person p; // Zeiger ist hier unnötig
    strcpy(p.vorname, vorname); 
    strcpy(p.nachname, nachname); 

    return &amp;p; 
} 

Person* person_einlesen() 
{ 
    char vorname[30]; 
    char nachname[30]; 

    cout &lt;&lt; &quot;Vorname: &quot;; 
    cin &gt;&gt; vorname; 
    cout &lt;&lt; &quot;Nachname: &quot;; 
    cin &gt;&gt; nachname; 

    Person* p = neue_person(vorname, nachname); 

    return p; 
} 

void person_ausgeben(Person p) 
{ 
	std::cout&lt;&lt; &quot;person_ausgeben():&quot; &lt;&lt;std::endl; // Bitte kein printf

	std::cout&lt;&lt; p.vorname &lt;&lt;std::endl;
	std::cout&lt;&lt; p.nachname &lt;&lt;std::endl;
} 

int main() 
{ 
    Person* p = person_einlesen(); 

    person_ausgeben(*p); 

	std::cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1812159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812159</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Mon, 23 Nov 2009 09:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 10:09:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Person* neue_person(char vorname[30], char nachname[30])
{
    Person* p;
    strcpy(p-&gt;vorname, vorname);
    strcpy(p-&gt;nachname, nachname);
    return p;
}
</code></pre>
<p>Hier liegt der Hund begraben. Du erzeugst einen Zeiger auf eine Person, der auf nichts zeigt. Du hast kein Objekt konstruiert!<br />
--&gt; <code>Person *p = new Person;</code><br />
Und schon sieht die Welt wieder heile aus. Vergiss nicht, das Objekt mit <code>delete</code> zu zerstören!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812173</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Mon, 23 Nov 2009 10:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 10:16:16 GMT]]></title><description><![CDATA[<p>@ Kóyaánasqatsi</p>
<pre><code class="language-cpp">Person* neue_person(char *vorname, char *nachname)
{
    Person p; // Zeiger ist hier unnötig
    strcpy(p.vorname, vorname);
    strcpy(p.nachname, nachname);

    return &amp;p;
}
</code></pre>
<p>Der Zeiger ist sehr wohl nötig, da das Objekt p nach dem Verlassen von neue_person zerstört werden würde. oO</p>
<p>@TE<br />
Verbesserte Version deines Programmes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Person
{
    Person(string vor, string nach)
     : vorname(vor), nachname(nach)
    {}

    string vorname;
    string nachname
};

Person* neue_person(string vorname, string nachname)
{
    Person *p = new Person(vorname, nachname);
    return p;
}

Person* person_einlesen()
{
    char vorname[30];
    char nachname[30];

    cout &lt;&lt; &quot;Vorname: &quot;;
    cin &gt;&gt; vorname;
    cout &lt;&lt; &quot;Nachname: &quot;;
    cin &gt;&gt; nachname;

    Person* p = neue_person(vorname, nachname);
    return p;
}

void person_ausgeben(Person p)
{
    std::cout&lt;&lt; &quot;person_ausgeben():&quot; &lt;&lt;std::endl;

    std::cout&lt;&lt; p.vorname &lt;&lt;std::endl;
    std::cout&lt;&lt; p.nachname &lt;&lt;std::endl;
}

int main()
{
    Person* p = person_einlesen();

    person_ausgeben(*p);

    std::cin.get();
    delete p;
}
</code></pre>
<p>rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812180</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 23 Nov 2009 10:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 10:21:46 GMT]]></title><description><![CDATA[<p>Wenn du C++ programmierst, dann verwende doch bitte die sprachlichen Mittel, die dir diese Sprache zur Verfuegung stellt. Hier ist es std::string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812183</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 23 Nov 2009 10:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 11:11:22 GMT]]></title><description><![CDATA[<p>hi leute,</p>
<p>danke für eure ausführlichen antworten!<br />
das problem ist, dass ich in c nachhilfe geb (eigentlich programmier ich eher java und perl) und mein schüler nimmt zwar sehr wohl einen c++ compiler her, sie lernen aber im unterricht noch keine oop; d.h. ich bin mit dem nutzen der sprache zur zeit noch etwas gebunden.</p>
<p>wie auch immer - jedenfalls danke für eure ratschläge ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812220</guid><dc:creator><![CDATA[guni]]></dc:creator><pubDate>Mon, 23 Nov 2009 11:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 11:18:34 GMT]]></title><description><![CDATA[<p>guni schrieb:</p>
<blockquote>
<p>dass ich in c nachhilfe geb</p>
</blockquote>
<p>Darf man wissen, wieso du nachhilfe in etwas gibst das du nicht beherrscht? Naja, jedem das seine...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812227</guid><dc:creator><![CDATA[jesus was black]]></dc:creator><pubDate>Mon, 23 Nov 2009 11:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 11:35:39 GMT]]></title><description><![CDATA[<p>ich beherrsche das programmieren.<br />
die sprache ist ja grundsätzlich egal wenn man jetzt mal von irgendwelchen esotersichen programmiersprachen absieht.</p>
<p>und c hab ich in der vergangenheit auch schon mal ein bisschen was gemacht.<br />
grundsätzlich wird in der klasse c auf einem niveau unterrichtet, dass ich mir auch noch zutrau; es gibt halt immer wieder situationen, in denen wir kurz mal googeln müssen.</p>
<p>die aktuelle aufgabenstellung ist aus der situation heraus gekommen; die klasse ist noch lange nicht so weit, dass sie sich mit pointern auseinandersetzt; das war eine von mir erfundene aufgabenstellung.</p>
<p>frage beantwortet? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /><br />
also ... nochmals danke für eure hilfe.</p>
<p>und - bezugnehmend auf den nickname desjenigen, der hier zuletzt geantwortet hat: ob jesus schwarz war wage ich mal in frage zu stellen, nachdem er israelit war <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812244</guid><dc:creator><![CDATA[guni]]></dc:creator><pubDate>Mon, 23 Nov 2009 11:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 12:59:09 GMT]]></title><description><![CDATA[<p>jetzt steh ich schon wieder auf der leitung.<br />
um meine struct aus einer datei auslesen zu können müssen die daten ja eine fixlänge haben ...</p>
<p>also hab ich mir so eine fillup-funktion geschrieben;</p>
<pre><code class="language-cpp">char* auffuellen(char* text, int gesamtlaenge)
{
	char* ret;
	strcpy(ret, text);
	for (int i = sizeof(text)+1; i&lt;gesamtlaenge; i++) {
		ret[i] = ' ';
	}
	ret[gesamtlaenge] = '\0';
	return ret;
}

void person_speichern(char* filename, Person* p)
{
	char* c = auffuellen(p-&gt;vorname, 10);
	FILE* fp = fopen(filename, &quot;w&quot;);
	fprintf(fp, p-&gt;vorname);
	fprintf(fp, p-&gt;nachname);
	fclose(fp);
}

int main()
{
	struct Person* p = person_einlesen();
	person_speichern(&quot;personen.dat&quot;, p);

	char* b = &quot;test&quot;;
	char* c = auffuellen(p-&gt;vorname, 10);
	cout &lt;&lt; c &lt;&lt; &quot;.&quot;;
}
</code></pre>
<p>das komische is: sie funktioniert in der main, in der person_speichern bekomm ich allerdings einen fehler ...</p>
<p>weiß da noch irgendwer weiter?!</p>
<p>ps.: ich weiß, dass ich so einen fillup theoretisch mit irgendeinem sprintf oder sowas auch lösen könnte; aber ein paar funktionen dazu sind eine ganz nette übung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812286</guid><dc:creator><![CDATA[guni]]></dc:creator><pubDate>Mon, 23 Nov 2009 12:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 13:34:19 GMT]]></title><description><![CDATA[<p>... aber eigentlich ist das ja eine andere frage.<br />
ich werd dazu ein neues thema aufmachen.</p>
<p>wie kann ich denn diesen thread hier als erledigt markieren?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812307</guid><dc:creator><![CDATA[guni]]></dc:creator><pubDate>Mon, 23 Nov 2009 13:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 16:15:35 GMT]]></title><description><![CDATA[<p>guni schrieb:</p>
<blockquote>
<p>jetzt steh ich schon wieder auf der leitung.<br />
um meine struct aus einer datei auslesen zu können müssen die daten ja eine fixlänge haben ...</p>
<p>also hab ich mir so eine fillup-funktion geschrieben;</p>
<pre><code class="language-cpp">char* auffuellen(char* text, int gesamtlaenge)
{
	char* ret;         //&lt;---| Wie genau stellst du dir das hier vor??
	strcpy(ret, text); //&lt;---|
	for (int i = sizeof(text)+1; i&lt;gesamtlaenge; i++) {
		ret[i] = ' ';
	}
	ret[gesamtlaenge] = '\0';
	return ret;
}
</code></pre>
</blockquote>
<p>Tut mir leid aber ich kann beim besten willen nicht erkennen, dass du C geschweige denn C++ beherrscht. Stichwort: wilder Zeiger.<br />
Du musst schon Speicher reservieren.<br />
Aber ich verstehe sowieso nicht, warum die dir das Leben so unnötig kompliziert machst und Zeiger zurück gibts?<br />
Warum keine Kopien über den Stack, so wie es viel sinnvoller wäre.</p>
<p>Gate</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812442</guid><dc:creator><![CDATA[Gate]]></dc:creator><pubDate>Mon, 23 Nov 2009 16:15:35 GMT</pubDate></item><item><title><![CDATA[Reply to struct mit char[] einlesen on Mon, 23 Nov 2009 17:37:22 GMT]]></title><description><![CDATA[<p>ich kann mich auch nicht erinnern, jemals behauptet zu haben, dass ich c oder c++ beherrsche.<br />
ich habe geschrieben, dass ich das Programmieren beherrsche; nicht c.<br />
weder perl noch java fordert, dass ich speicher reserviere!<br />
stimmt - dieses Konzept ist neu für mich.</p>
<p>Zeiger find ich auch grundsätzlich sehr unkompliziert (zumindest sind sie das in Perl für mich ...)</p>
<p>und was für eine Alternative hab ich denn um in c einen String beliebiger Länge zurückzugeben?</p>
<p>mfg, guni</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1812486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1812486</guid><dc:creator><![CDATA[guni]]></dc:creator><pubDate>Mon, 23 Nov 2009 17:37:22 GMT</pubDate></item></channel></rss>