単純なパスカルからcstringへの変換方法を書こうとしています。このメソッドは、void * ptrをパスカル文字列に取ります。結果として得られるcstringは、渡されるパスカル文字列の正しい文字数を返します。しかし、それに含まれるのは、文字列の長さの16進値です。たとえば、パスカル文字列の最初の要素は文字列の長さです。たとえば、最初の要素の数値が15の場合、return文は15文字すべてがFFに設定されたcstringを返します。あたかもポインタがインクリメントされていないかのように。これを修正する方法がわかりません。どんな助けもありがとう。 ``でなければなりません(のchar *)PTR ++ `;パスカル文字列からcstringへ
#include <stdio.h>
#include <stdlib.h>
char* pascal_convert(void* ptr) {
int len = *((int*)ptr)+1;
char *cString = malloc(sizeof(char) * (len));
(int*)ptr + 1;
for (int i = 0; i < len; i++) {
cString[i] = *((char*)ptr);
(char*)ptr + 1;
}
cString[len] = '\0';
return cString;
}
'(のchar *)PTR + 1列の現在のアドレスを格納する必要があります。 – dvhh
追加:あなたのintはどのサイズですか?あなたのパスカル文字列の最大サイズは何ですか? – dvhh
intの値は、パスカル文字列の最初の要素の値です。パスカル文字列のサイズに上限はありません。キャストポインタを++の作業でインクリメントします。 – Keith