<?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[Debug-Modus + Übergabe eines char*]]></title><description><![CDATA[<p>Werte Forumsteilnehmer!</p>
<p>Problembeschreibung:<br />
--------------------</p>
<p>Deklariert und definiert wird ein char[], indem die werte als hexvalue direkt reingeschrieben werden. Dies ist der sog. APDU-Block der einem Kommando-header bei der Kommunikation mit einer Chipkarte entspricht. Die API die ich verwenden darf verlangt den header und datenblock als char*.<br />
&quot;Leider&quot; entspricht 0x00 bei einem Char dem Terminierungszeichen aufgrund des ASCII-Codes - jedenfalls wird nach dem ersten Haltepunkt das array mf_select_header mit allen hex-werten angezeigt, sobald sich der debugger in der methode MergeHeaderAndData befindet wird der Übergabeparameter nurmehr mit 0x00 angezeigt, wie wenn er nach dem ersten 0x00 den rest kappen würde.</p>
<p>Frage: interpretiert der debugger jedes übergebene char[] als String? (Der Unterschied zwischen char* und char[] ist mir nach durchlesen der faq von de.comp.lang.c halbwegs klar erschienen - aber offensichtlich der übergang von theorie auf praxis nicht). dann wäre das verhalten logisch, ansonsten dürfte es an einem denkfehler meinerseits liegen</p>
<pre><code class="language-cpp">//  Select MF
unsigned char  mf_select_header[7] = {0x00, 0xA4,0x00,0x0C,0x02,0x3F,0x00};
unsigned char mf_fid[2]  = {0x3F, 0x00};

pT-&gt;Select(rTComPeg, mf_select_header, mf_fid);
------------------

  void CardComm::Select(TCommand_Pegoda *rTComPeg, unsigned char *header, unsigned char *data)
  {
    unsigned char* pucData = 0;

HALTEPUNKT

    pucData = MergeHeaderAndData(header, data);
    unsigned int uiDataLen = 0;
    // see Commands for ACOS EMV: p2 = 00 for statuswords only
    unsigned char pucRetData[3] = {0,0,0};
    unsigned int puiRetLen[1] = {3};
    unsigned int uiRetBufferLen = 3;

...
(usw, usf)
</code></pre>
<p>Borland-Version:<br />
----------------<br />
Ich benutze &quot;den C++ Builder 6</p>
<p>uawg<br />
d.e</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/86285/debug-modus-übergabe-eines-char</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 14:38:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/86285.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Sep 2004 12:56:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug-Modus + Übergabe eines char* on Fri, 17 Sep 2004 13:17:01 GMT]]></title><description><![CDATA[<p>Werte Forumsteilnehmer!</p>
<p>Problembeschreibung:<br />
--------------------</p>
<p>Deklariert und definiert wird ein char[], indem die werte als hexvalue direkt reingeschrieben werden. Dies ist der sog. APDU-Block der einem Kommando-header bei der Kommunikation mit einer Chipkarte entspricht. Die API die ich verwenden darf verlangt den header und datenblock als char*.<br />
&quot;Leider&quot; entspricht 0x00 bei einem Char dem Terminierungszeichen aufgrund des ASCII-Codes - jedenfalls wird nach dem ersten Haltepunkt das array mf_select_header mit allen hex-werten angezeigt, sobald sich der debugger in der methode MergeHeaderAndData befindet wird der Übergabeparameter nurmehr mit 0x00 angezeigt, wie wenn er nach dem ersten 0x00 den rest kappen würde.</p>
<p>Frage: interpretiert der debugger jedes übergebene char[] als String? (Der Unterschied zwischen char* und char[] ist mir nach durchlesen der faq von de.comp.lang.c halbwegs klar erschienen - aber offensichtlich der übergang von theorie auf praxis nicht). dann wäre das verhalten logisch, ansonsten dürfte es an einem denkfehler meinerseits liegen</p>
<pre><code class="language-cpp">//  Select MF
unsigned char  mf_select_header[7] = {0x00, 0xA4,0x00,0x0C,0x02,0x3F,0x00};
unsigned char mf_fid[2]  = {0x3F, 0x00};

pT-&gt;Select(rTComPeg, mf_select_header, mf_fid);
------------------

  void CardComm::Select(TCommand_Pegoda *rTComPeg, unsigned char *header, unsigned char *data)
  {
    unsigned char* pucData = 0;

HALTEPUNKT

    pucData = MergeHeaderAndData(header, data);
    unsigned int uiDataLen = 0;
    // see Commands for ACOS EMV: p2 = 00 for statuswords only
    unsigned char pucRetData[3] = {0,0,0};
    unsigned int puiRetLen[1] = {3};
    unsigned int uiRetBufferLen = 3;

...
(usw, usf)
</code></pre>
<p>Borland-Version:<br />
----------------<br />
Ich benutze &quot;den C++ Builder 6</p>
<p>uawg<br />
d.e</p>
]]></description><link>https://www.c-plusplus.net/forum/post/609193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/609193</guid><dc:creator><![CDATA[inner_fire]]></dc:creator><pubDate>Fri, 17 Sep 2004 13:17:01 GMT</pubDate></item></channel></rss>