我在windows x64上使用eclipse和Visual Studio。当我通过将指针递增1在visual studio中打印以下字符串时,它在visual studio中显示正确的结果。但是在eclipse中,指针被提前4而不是1.为什么会出现这种差异?如何在eclipse中使指针前进1?
INPUT STRING
[{ “比例因子”:4, “球”:{ “半径”:0.03999999910593033}}]
CODE
unsigned char* temp = fileUtils->getFileData("levels.json", "r", &size);
wchar_t *levelData = new wchar_t[size];
size_t len_or_error = 0;
if(size > 0) {
const char* temp1 = reinterpret_cast<const char*>(temp);
len_or_error = mbstowcs(&levelData[0], &temp1[0], size);
}
for(int i = 0; i < 100; i++) {
CCLOG("i = %d | %s ", i, levelData + i);
}
OUTPUT VS 12
i = 0 | [
i = 1 | {
i = 2 | "
i = 3 | s
i = 4 | c
i = 5 | a
i = 6 | l
OUTPUT ECLIPSE
i = 0 | [{"scaleFactor":4,"ball":{"radius":0.03999999910593033}}]
i = 1 | caleFactor":4,"ball":{"radius":0.03999999910593033}}]
i = 2 | Factor":4,"ball":{"radius":0.03999999910593033}}]
i = 3 | or":4,"ball":{"radius":0.03999999910593033}}]
i = 4 | 4,"ball":{"radius":0.03999999910593033}}]
更新 忘了提到我在Android设备上运行eclipse版本而不是在Windows本身上运行。
UPDATE2
在打印wchar_t之前添加了额外的代码。
CCLOG是cocos2d-x https://github.com/cocos2d/cocos2d-x
的默认记录器答案 0 :(得分:1)
您遇到的问题是,与其他编译器(如GCC)相比,wchar_t
与VC ++编译器的大小不同。
Windows使用two bytes to represent wchar_t。您的代码似乎在Visual Studio中正常工作,因为您告诉格式字符串说明符读取一个窄字符串(一个字节)。您应该使用%s
来正确读取宽字符串,而不是%ls
。但是,我认为你真正想做的是读一个字符。为此,请尝试:
printf("i = %d | %lc\r\n ", i, *( levelData + i ) );
您没有指定使用Eclipse的编译器,但GCC(我认为MinGW)最多使用4个字节来存储wchar_t
,这就是它跳过4个字节的原因。请参阅How big is wchar_t with GCC?看起来它也使用可变长度编码来存储数据。