2016-10-24 82 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'的值保持不变。 –