If a buffer expect the first "element", and count is the number of elements to write, then what is the unit size of that element? is it always "byte"?<br><br><div class="gmail_quote">2013/3/3 leledumbo <span dir="ltr"><<a href="mailto:leledumbo_cool@yahoo.co.id" target="_blank">leledumbo_cool@yahoo.co.id</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">> My question is, why the above code with string works sometime, but not<br>
alwasy fail?<br>
<br>
</div>TStream.Write expects a buffer, typically the first element of an item (NOT<br>
a pointer to it) and the length (number of elements after first one).<br>
<br>
> fs.Write(s, Length(s));<br>
<br>
Here you try to give the WHOLE string, which is variable depending on the<br>
string type. It could be plain array for ShortString, but also pointer to a<br>
dynamically allocated structure for other strings. For ShortStrings,<br>
however, the above code will have the string length (if I'm not mistaken)<br>
before the first character in the written file.<br>
<br>
To do it correctly without converting to PChar is to give the first element:<br>
<br>
fs.Write(s[1], Length(s));<br>
<div class="im"><br>
> What is the internal structure of string and variable array (i.e. array of<br>
> something)?<br>
<br>
</div>Explained in docs:<br>
- static array:<br>
<a href="http://www.freepascal.org/docs-html/prog/progsu161.html#x204-2170008.2.9" target="_blank">http://www.freepascal.org/docs-html/prog/progsu161.html#x204-2170008.2.9</a><br>
- dynamic array:<br>
<a href="http://www.freepascal.org/docs-html/prog/progsu162.html#x205-2180008.2.10" target="_blank">http://www.freepascal.org/docs-html/prog/progsu162.html#x205-2180008.2.10</a><br>
- strings:<br>
<a href="http://www.freepascal.org/docs-html/prog/progsu159.html#x202-2120008.2.7" target="_blank">http://www.freepascal.org/docs-html/prog/progsu159.html#x202-2120008.2.7</a><br>
<div class="im"><br>
> What is the difference between @string and @string[1] or @array and<br>
> @array[0]?<br>
<br>
</div>@string means pointer to to the string STRUCTURE, for ShortString, this is<br>
the same as @string[0] (the length)<br>
@string[1] means pointer to the first character in the string<br>
@array means pointer to the array STRUCTURE, for static array, this is the<br>
same as @array[<lowest index>]<br>
@array[0] means pointer to the element at index 0<br>
<br>
<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-buffer-and-string-tp4029601p4029603.html" target="_blank">http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-buffer-and-string-tp4029601p4029603.html</a><br>


Sent from the Free Pascal - Lazarus mailing list archive at Nabble.com.<br>
<br>
--<br>
_______________________________________________<br>
Lazarus mailing list<br>
<a href="mailto:Lazarus@lists.lazarus.freepascal.org">Lazarus@lists.lazarus.freepascal.org</a><br>
<a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus</a><br>
</blockquote></div><br>