<?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[Rückgabe eines Strings aus eine Funktion]]></title><description><![CDATA[<p>Guten Tag,<br />
ich möchte gerne aus einer Funktion den dort von der Seriellen Schnittstelle eingelesenen String als Rückgabewert erhalten. Im Moment sieht das ganze wie folgt aus</p>
<pre><code class="language-c">int serial_read(int port){
     int buffer_size = 4       // Größe des Eingabepuffers
    char buffer[buffer_size];  // Eingabepuffer für die komplette Eingabe 
    int anz;         // gelesene Zeichen
    char c;          // Eingabepuffer für das aktuelle Byte 
    int  i;          // Zeichenposition bzw Index
    i = 0;
    do{              // Lesen bis zur Puffergröße (im Moment 4 Byte)
        anz = read(port, (void*)&amp;c, 1);
        if (anz &gt; 0){
            if (c != '\r'){
                buffer[i++] = c;      
            }
        }
    }while (c != '\r' &amp;&amp; i &lt; buffer_size &amp;&amp; anz &gt;= 0);       
   
    if (anz &lt; 0) {
        perror(&quot;Lesen fehlgeschlagen&quot;);
    }
    else if (i == 0) {
        perror(&quot;Keine Daten empfangen&quot;);
    }
    else {
        buffer[i] = '\0';     
        // printf(&quot;%i Bytes: %s&quot;, i, buffer);    // zur Fehlersuche
    }
    // Rückgabewert 
    int ergebnis;
    if (strstr(buffer,&quot;_OK_&quot;)){
        ergebnis = 1;
    }
    else{
        ergebnis = 0;
    }
return ergebnis; 
}
</code></pre>
<p>Meine C Kenntnisse sind noch nicht so gut ;). Ich habe es erst einmal so gelöst, dass ich einfach den eingehenden String einfach auf eine Zeichenkette überprüfe und dann etntweder eine 1 oder eine 0 zurück gebe.</p>
<p>Das ganze Programm soll zur Steuerung eines µC mit dem PC sein.</p>
<p>Ich hoffe das mir jemand weiterhelfen kann.</p>
<p>Schönen Karfreitag noch<br />
Gruß Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/354020/rückgabe-eines-strings-aus-eine-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 17:14:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/354020.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Apr 2023 17:26:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Fri, 07 Apr 2023 17:26:38 GMT]]></title><description><![CDATA[<p>Guten Tag,<br />
ich möchte gerne aus einer Funktion den dort von der Seriellen Schnittstelle eingelesenen String als Rückgabewert erhalten. Im Moment sieht das ganze wie folgt aus</p>
<pre><code class="language-c">int serial_read(int port){
     int buffer_size = 4       // Größe des Eingabepuffers
    char buffer[buffer_size];  // Eingabepuffer für die komplette Eingabe 
    int anz;         // gelesene Zeichen
    char c;          // Eingabepuffer für das aktuelle Byte 
    int  i;          // Zeichenposition bzw Index
    i = 0;
    do{              // Lesen bis zur Puffergröße (im Moment 4 Byte)
        anz = read(port, (void*)&amp;c, 1);
        if (anz &gt; 0){
            if (c != '\r'){
                buffer[i++] = c;      
            }
        }
    }while (c != '\r' &amp;&amp; i &lt; buffer_size &amp;&amp; anz &gt;= 0);       
   
    if (anz &lt; 0) {
        perror(&quot;Lesen fehlgeschlagen&quot;);
    }
    else if (i == 0) {
        perror(&quot;Keine Daten empfangen&quot;);
    }
    else {
        buffer[i] = '\0';     
        // printf(&quot;%i Bytes: %s&quot;, i, buffer);    // zur Fehlersuche
    }
    // Rückgabewert 
    int ergebnis;
    if (strstr(buffer,&quot;_OK_&quot;)){
        ergebnis = 1;
    }
    else{
        ergebnis = 0;
    }
return ergebnis; 
}
</code></pre>
<p>Meine C Kenntnisse sind noch nicht so gut ;). Ich habe es erst einmal so gelöst, dass ich einfach den eingehenden String einfach auf eine Zeichenkette überprüfe und dann etntweder eine 1 oder eine 0 zurück gebe.</p>
<p>Das ganze Programm soll zur Steuerung eines µC mit dem PC sein.</p>
<p>Ich hoffe das mir jemand weiterhelfen kann.</p>
<p>Schönen Karfreitag noch<br />
Gruß Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2615405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615405</guid><dc:creator><![CDATA[Andreas Dues]]></dc:creator><pubDate>Fri, 07 Apr 2023 17:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Fri, 07 Apr 2023 18:28:12 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/38141">@Andreas-Dues</a> Du musst buffer und buffer_size an die Funktion mit übergeben (so wie port).</p>
<p>4 ist zu wenig um als C-String „<em>OK</em>“ und die '\0' aufzunehmen.<br />
Das buffer[i] = 0; überschreibt dann andere Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2615406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615406</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Fri, 07 Apr 2023 18:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Sat, 08 Apr 2023 11:49:18 GMT]]></title><description><![CDATA[<p>Zeile 3 verwendet VLA, das ist großer Unfug.<br />
Zeile 9 verwendet einen Zeigercast, das ist hier großer Unfug. (verwendest du den C++ Modus des Compilers?!)</p>
<p>Buffer musst du im aufrufenden Kontext definieren, innerhalb von LowLevel Funktionen macht man keine Ausgaben auf stdout/stderr sondern ebenfalls allenfalls im aufrufenden Kontext.</p>
<pre><code class="language-c">int serial_read (int port, char *b, int buffermax)
{
  int anz;         // gelesene Zeichen
  int i = 0;       // Zeichenposition bzw Index

  do {				// Lesen bis zur Puffergroesse
      anz = read (port, b, 1);
      if (anz &gt; 0)
	    if (*b != '\r')
	        b++,i++;
     }
  while (*b != '\r' &amp;&amp; i &lt; buffermax-1 &amp;&amp; anz &gt;= 0);
  *b = 0;

  if (i == 0)
    {
      perror (&quot;Keine Daten empfangen&quot;);
    }

  // Rueckgabewert 
  int ergebnis;
  if (strstr (b, &quot;_OK_&quot;))
    {
      ergebnis = 1;
    }
  else
    {
      ergebnis = 0;
    }
  return ergebnis;
}

int main ()
{
  char buffer[BUFSIZ]={0};
  int r = serial_read (4711, buffer, BUFSIZ);
  printf (&quot;%d\n%s&quot;, r, buffer);
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2615409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615409</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Sat, 08 Apr 2023 11:49:18 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Sat, 08 Apr 2023 15:04:16 GMT]]></title><description><![CDATA[<p>Danke für die Informationen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title="(y)"
      alt="👍"
    /><br />
Also muss ich den Buffer als globales Char Arrays erstellen um sie weiter zu verarbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2615412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615412</guid><dc:creator><![CDATA[Andreas Dues]]></dc:creator><pubDate>Sat, 08 Apr 2023 15:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Sat, 08 Apr 2023 15:12:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/38141">@Andreas-Dues</a></p>
<p>Nein, versuche globale Variablen so weit wie möglich zu vermeiden. Es reicht aus, den Puffer in der aufrufenden Funktion zur Verfügung zu stellen. Genau so, wie wob das in seinem Beispiel schon gemacht hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2615413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615413</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Sat, 08 Apr 2023 15:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Sun, 09 Apr 2023 11:40:01 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/38141">@Andreas-Dues</a><br />
Globale Variablen sind grober Unfug, werden nur von Hochschulprofessoren, Buchautoren, Tutorialschreiberlingen und TopProfis (denn die wissen was sie tun) eingesetzt.<br />
Alles nicht deine Kategorien.<br />
Globale Variablen haben in deinem Fall zB den Nachteil, dass die Initialisierung nur einmal passiert, du den Buffer aber mehrfach verwenden wirst und dann diverse Fehlerszenarien debuggen darfst - alles vermeidbar ohne deren Verwendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2615434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615434</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Sun, 09 Apr 2023 11:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe eines Strings aus eine Funktion on Mon, 10 Apr 2023 08:31:06 GMT]]></title><description><![CDATA[<p>Guten Morgen und frohe Ostern,<br />
vielen Dank für die Infos eurerseits.</p>
<p>Gruß Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2615456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2615456</guid><dc:creator><![CDATA[Andreas Dues]]></dc:creator><pubDate>Mon, 10 Apr 2023 08:31:06 GMT</pubDate></item></channel></rss>