<?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[char *zeigerfeld]]></title><description><![CDATA[<p>hi, ich habe volgendes programm geschrieben, der sinn ist eigentlich<br />
dass ich zeilen aus einer datei einlesen will und dass dann jede zeile in einem zeiger char *k gespeichert werden soll.<br />
z.b.<br />
k[1]=&quot;hausmann&quot;<br />
k[2]=&quot;boot&quot;</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
using namespace std;

class lesen {
    private:
    char *filename;
    string errortext;
    int zeilen;
    char *k;

    public:
    lesen():filename(0),zeilen(0){k=new char[50]; /*k[1]=&quot;hh&quot;;*/}
    ~lesen() { }
    void setfilename(char *f) { filename=f;}
    void cfile();
};

void lesen::cfile() {
    ifstream in(filename);
    string tmp;
    if (!in) {
        errortext=&quot;Konnte Datei nicht oeffnen&quot;;
        exit(1);
    }
    while (getline(in,tmp,'\n')) {
        zeilen++;
        cout &lt;&lt; tmp&lt;&lt; endl;
    }
}

int main(void)
{
    lesen *l;
    l=new lesen;
    l-&gt;setfilename(&quot;Bildschirmausdruck.txt&quot;);
    l-&gt;cfile();
    return 0;
}
</code></pre>
<p>das problem ich den kommentar entferne (gruen) erhalte ich folgende fehlermeldung:<br />
error: invalid conversion from `const char*' to `char'</p>
<p>ich weis jetzt nur nicht, was ich überladen muss dafuer...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193007/char-zeigerfeld</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 18:41:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193007.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Sep 2007 00:20:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char *zeigerfeld on Fri, 21 Sep 2007 00:20:08 GMT]]></title><description><![CDATA[<p>hi, ich habe volgendes programm geschrieben, der sinn ist eigentlich<br />
dass ich zeilen aus einer datei einlesen will und dass dann jede zeile in einem zeiger char *k gespeichert werden soll.<br />
z.b.<br />
k[1]=&quot;hausmann&quot;<br />
k[2]=&quot;boot&quot;</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
using namespace std;

class lesen {
    private:
    char *filename;
    string errortext;
    int zeilen;
    char *k;

    public:
    lesen():filename(0),zeilen(0){k=new char[50]; /*k[1]=&quot;hh&quot;;*/}
    ~lesen() { }
    void setfilename(char *f) { filename=f;}
    void cfile();
};

void lesen::cfile() {
    ifstream in(filename);
    string tmp;
    if (!in) {
        errortext=&quot;Konnte Datei nicht oeffnen&quot;;
        exit(1);
    }
    while (getline(in,tmp,'\n')) {
        zeilen++;
        cout &lt;&lt; tmp&lt;&lt; endl;
    }
}

int main(void)
{
    lesen *l;
    l=new lesen;
    l-&gt;setfilename(&quot;Bildschirmausdruck.txt&quot;);
    l-&gt;cfile();
    return 0;
}
</code></pre>
<p>das problem ich den kommentar entferne (gruen) erhalte ich folgende fehlermeldung:<br />
error: invalid conversion from `const char*' to `char'</p>
<p>ich weis jetzt nur nicht, was ich überladen muss dafuer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369784</guid><dc:creator><![CDATA[werner_neu]]></dc:creator><pubDate>Fri, 21 Sep 2007 00:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to char *zeigerfeld on Fri, 21 Sep 2007 03:26:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char *k = new char[50];
</code></pre>
<p>du hast speicher allokiert für 50 chars, und der zeiger ka zeit aufs erste!</p>
<p>bspw:</p>
<pre><code class="language-cpp">k[x]
</code></pre>
<p>zeigt nun auf das ZEICHEN mit dem index x! d.h. du kann nur EIN zeichen im index speichern, aber du willst ein string speichern ! das geht nicht:)</p>
<p>k[0]='A'; Zeichen OK<br />
k[0]=&quot;AA&quot; ; String FEHLER (Ist ja nur platz für EIN ZEICHEN)</p>
<p>Lösung_</p>
<pre><code class="language-cpp">char **k = char*[10]; //Pointer Array; Platz für 10 Strings

for(int i=0; i&lt; 10; ++i)
  k[i]= new char [50];
</code></pre>
<p>nun kannst du damit arbeiten wie du es vor hattest</p>
<pre><code class="language-cpp">k[0]= &quot;hausmann&quot;;
</code></pre>
<p>P.S: Speicher freigeben nich vergessen</p>
<p>P.P.S: Nimm einen</p>
<pre><code class="language-cpp">std::vector&lt; std::string &gt; k;
</code></pre>
<p>als alternative</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369799</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 21 Sep 2007 03:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to char *zeigerfeld on Fri, 21 Sep 2007 15:57:34 GMT]]></title><description><![CDATA[<p>vielen dank dir</p>
<p>jetzt wo du es gesagt hast, ist es mir auch klar geworden mit dem einem char.</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370237</guid><dc:creator><![CDATA[werner_neu]]></dc:creator><pubDate>Fri, 21 Sep 2007 15:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to char *zeigerfeld on Fri, 21 Sep 2007 16:35:23 GMT]]></title><description><![CDATA[<p>Und das: void setfilename(char *f) { filename=f;} sollte man tunichts vermeiden. Du lässt filename auf einen dir unbekannten Bereich zeigen! Was passiert wenn der Array auf den f zeigt nach dem Aufruf von setfilename wieder freigegeben wird?</p>
<pre><code class="language-cpp">void setfilename(char *f) { filename=f;}
</code></pre>
<pre><code class="language-cpp">void set_filename(const char* filename)
{
    std.:size_t len = std::strlen(filename) + 1;
    m_filename = new char[len];
    std::strcpy(m_filename, filename);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1370252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370252</guid><dc:creator><![CDATA[deviloper]]></dc:creator><pubDate>Fri, 21 Sep 2007 16:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to char *zeigerfeld on Sun, 23 Sep 2007 08:24:51 GMT]]></title><description><![CDATA[<p>Ehm ich war &quot;deviloper&quot; und &quot;(D)Evil_not at home&quot; ...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;	// std::ostream&amp;
#include &lt;fstream&gt;	// std::ifstream
#include &lt;vector&gt;	// std::vector
#include &lt;string&gt;	// std::getline
#include &lt;cstring&gt;	// std::strlen, std::strcpy
// NIE im Header using-Direktive verwenden

class read_file
{
private:
	char*	m_filename;				// entweder komplett char* oder komplett std::string, 
									// damit du aber deine Fehler verstehst ... dieses
									// Mal komplett mit char* gearbeitet.
	std::vector&lt;char*&gt; m_content;	// Wird jetzt umständlich da wir char* statt std::string
									// nutzen, aber du sollst ja den elementaren Umgang mit 
									// Zeigern dabei lernen. std::vector ist ein dynamischer 
									// Array

public:
	read_file() : m_filename(NULL) {}
	read_file(const char* filename, bool read) { set_filename(filename); if (read == true) read_data();}
	~read_file() 
	{ 
		delete [] m_filename;		// Was wir einmal anfordern müssen wir wieder freigeben.
									// delete [] NULL ist laut Standard auch erlaubt.
		for (std::vector&lt;char*&gt;::iterator it = m_content.begin(); it != m_content.end(); ++it) 
									// Einmal den kompletten vector durchinterrieren.
			delete [] (*it);		// Den beanspruchten Speicher wieder freigeben.
	}

	void set_filename(const char* filename)
	{ 
									// Wir wollen nicht das unser m_filename außerhalb des von uns
									// kontrollierten Bereiches liegt. D.h. es niemand uns zwischen-
									// durch zerstören kann.
		m_filename = new char[std::strlen(filename) + 1];	// Einen Array, mit Platz für soviele
															// Zeichen die bis zum nächsten '\0' in
															// filename stecken.
		std::strcpy(m_filename, filename);		// Und kopieren ...
	}

    void read_data()
	{
		std::ifstream in_file(m_filename);
		if (!in_file)
			throw std::invalid_argument(&quot;invalid filename&quot;);	// C++ hat exceptions ...
		char data[1024];			// Wir geben einfach eine maximale Größe
									// von 1023 vor (data[1024 - 1] = 0!)			
		while (std::getline(in_file, data, '\n', 1023))
		{
			m_content.push_back(NULL);
			m_content.at(m_content.size() - 1) = new char[std::strlen(data) + 1];
			std::copy(m_content.at(m_content.size() - 1), data);
		}
	}

	friend std::ostream&amp; operator &lt;&lt; (std::ostream&amp; out, const read_file&amp; data)
	{
		std::vector&lt;char*&gt;&amp; content = data.m_content;
		for (std::vector&lt;char*&gt;::iterator it = content.begin(); it != content.end(); ++it)
			out &lt;&lt; (*it) &lt;&lt; &quot;\n&quot;;
	}
};

int main()
{
	std::cout &lt;&lt; read_file(&quot;Bildschirmausdruck.txt&quot;, true) &lt;&lt; std::endl;
}
</code></pre>
<p>... ließ dir mal durch ob du alles verstehst ... sollte aber soweit so alles stimmen. Ist aber nicht getestet .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370926</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 23 Sep 2007 08:24:51 GMT</pubDate></item></channel></rss>