WEB开发网
开发学院手机开发Symbian 开发 Symbian开发入门 阅读

Symbian开发入门

 2010-06-03 23:07:00 来源:WEB开发网   
核心提示:TPtr8 memPtr(memoryLocation, maxLen); // length = 0, max length = 32TPtr8 memPtr2(memoryLocation, len, maxLen); // length = 12, max = 32另外,TPtr提供了赋值运算符=(),Symbi

TPtr8 memPtr(memoryLocation, maxLen); // length = 0, max length = 32

TPtr8 memPtr2(memoryLocation, len, maxLen); // length = 12, max = 32

另外,TPtr提供了赋值运算符=(),用来拷贝数据到指针所指向的内存(数据源可以是可修改、不可修改的指针描述符,或以0结尾的字符串)。如果要拷贝的数据的长度超过了描述符的最大长度,会引发一个系统异常。像TPtrC一样,TPtr也定义了一个Set()方法,用来改变描述符所指向的数据。

_LIT(KLiteralDes1, "Jackdaws love my big sphinx of quartz");

TBufC<60> buf(KLiteralDes1); // TBufC are described later

TPtr ptr(buf.Des()); // Points to the contents of buf

TUint16* memoryLocation; // Valid pointer into memory

...

TInt maxLen = 40; // Maximum length to be represented

TPtr memPtr(memoryLocation, maxLen); // length = 12, max length = 40

// Copy and replace

memPtr = ptr; // memPtr data is KLiteralDes1 (37 bytes), maxLength = 40

_LIT(KLiteralDes2, "The quick brown fox jumps over the lazy dog");

TBufC<100> buf2(KLiteralDes2); // TBufC are described later

TPtr ptr2(buf2.Des()); // Points to the data in buf

// Replace what ptr points to

ptr.Set(ptr2); // ptr points to contents of buf2, max length = 100

memPtr = ptr2; // Attempt to update memPtr which panics because the

// contents of ptr2 (43 bytes) exceeds max length of memPtr (40 bytes)

您一定不要混淆了Set()方法和=()赋值操作。前者将描述符的指针重置,使它指向新的数据区域,而后者将数据拷贝到描述符中,一般来说,这会更改描述符的长度,但不会更改它的最大长度值。

3.5 基于栈(stack-based)的缓冲区描述符

基于缓冲区的描述符也可以分为可修改的TBuf和不可修改TBufC的两种类型。对这种描述符来讲,字符串数据本身就是描述符的一部分。下图给出了描述符的内存布局:

这两种描述符通常用来存储定长的或相对较小的字符串,常用来存放长度小于256个字符的文件名。类似于C语言中的char[],但是,它们具有检查内存溢出的功能。

上一页  5 6 7 8 9 10 11 12 13 14 15  下一页

Tags:Symbian 开发 入门

编辑录入:coldstar [复制链接] [打 印]
赞助商链接