2016-10-24 128 views
0

試圖寫一個簡單的pascal到cstring的轉換方法。該方法將一個void * ptr傳遞給pascal字符串。生成的cstring爲傳遞的pascal字符串返回正確的字符數。但它包含的是字符串長度的十六進制值。例如,pascal字符串的第一個元素是字符串的長度。因此,例如,如果第一個元素中的數字是15,那麼return語句將返回一個包含15個字符並全部設置爲FF的cstring。就像指針沒有增加一樣。不知道如何解決這個問題。任何幫助,將不勝感激。Pascal String to 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

'(字符*)PTR + 1現住址;'應該是'(字符*)PTR ++'; – dvhh

+0

添加:你的int大小是多少?你的pascal字符串的最大尺寸是多少? – dvhh

+0

int的值是pascal字符串中第一個元素的值。 pascal字符串的大小沒有上限。用++遞增投射指針不起作用。 – 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'的值保持不變。 –