2016-10-24 3 views
0

単純なパスカルから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; 

}

+0

'(のchar *)PTR + 1列の現在のアドレスを格納する必要があります。 – dvhh

+0

追加:あなたのintはどのサイズですか?あなたのパスカル文字列の最大サイズは何ですか? – dvhh

+0

intの値は、パスカル文字列の最初の要素の値です。パスカル文字列のサイズに上限はありません。キャストポインタを++の作業でインクリメントします。 – Keith

答えて

1

あなたがどこか

int currentPtr = (int*)ptr + 1; 
for (int i = 0; i < len; i++) { 
    cString[i] = *((char*) currentPtr); 
    currentPtr++; 
} 
+0

これはうまくいきました。ありがとうございました。私が間違ったことを説明してもらえますか? – Keith

+0

あなたのコード '(char *)ptr + 1;'はアドレスを増やしますが、 'ptr'の値はそのままです。 –