April 01, 2022

On Friday, 1 April 2022 at 08:45:36 UTC, Ferhat Kurtulmuş wrote:

>

[...]
O satırı "Merhaba".writefln("%s", a); olarak

>

güncellersen dizenin hepsini yazacaktır. Tabi şunu unutmamalı ki "aâAÂ@" hazır değeri en sonda sıfır baytını içerdiğinden sorun çıkmıyor. Eğer a işaretçisi sıfır baytıyla bitmeyen bir dizenin başlangıcını gösteriyorsa o zaman toStringz ile veya manuel olarak ~ '\0' sıfır baytını eklemek gerekir.
[...]

Hocam, denedim ama anladığım kadarıyla write ile başlayan kolaylık işlevleri printf gibi bir gezinme yapmıyor. Tabi aşağıdaki gibi bir döngü ile kendiniz gezinirseniz başka:

import std.stdio;
void main()
{
  const(char)* ilk = " D Dili";
  assert(*ilk == 0x20); // true

  ilk.writeln; // 559E4FBA4A50

  "Merhaba".writefln("%s", ilk);  // Merhaba
  "Merhaba".writefln("%s", *ilk); // Merhaba

  "Merhaba".write;
  for(auto i = ilk; *i; i++) {
    write(*i);
  }
  writeln; // Merhaba D Dili
  printf("Merhaba%s\n", ilk); // Merhaba D Dili
}
April 01, 2022
On 4/1/22 08:31, Salih Dincer wrote:

> Hocam, denedim ama anladığım kadarıyla write ile başlayan kolaylık
> işlevleri printf gibi bir gezinme yapmıyor.

Bu da harika bir şey çünkü günümüzdeki güvenlik sorunlarının baş sorumlusu o gezinmedir. :/ (Bakınız buffer overrun (veya overflow)).

Hatta, Walter Bright'ın C'de gördüğü en büyük zayıflık, C dizilerinin uzunluklarını bilmemeleridir.

İlgisiz olarak, dizilerin uzunluklarını bilmemeleri performans sorunlarına da yol açar. Bir oyunun açılmasının 7 dakika kadar sürdüğünü ve sonunda bunun ayarlarda kullanılan koddaki strlen'lere bağlandığını okumuştum. Şu makale de benzer şeyleri buluyor:

  https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/

> Tabi aşağıdaki gibi bir
> döngü ile kendiniz gezinirseniz başka:

>    "Merhaba".write;
>    for(auto i = ilk; *i; i++) {
>      write(*i);
>    }

Oradaki yasal çünkü D, "Merhaba" gibi hazır değerlerin sonuna fazladan bir '\0' yerleştirir.

Ali

April 01, 2022

On Friday, 1 April 2022 at 15:31:26 UTC, Salih Dincer wrote:

>

On Friday, 1 April 2022 at 08:45:36 UTC, Ferhat Kurtulmuş wrote:

>

[...]
O satırı "Merhaba".writefln("%s", a); olarak

>

[...]
[...]

Hocam, denedim ama anladığım kadarıyla write ile başlayan kolaylık işlevleri printf gibi bir gezinme yapmıyor. Tabi aşağıdaki gibi bir döngü ile kendiniz gezinirseniz başka:

import std.stdio;
void main()
{
  const(char)* ilk = " D Dili";
  assert(*ilk == 0x20); // true

  ilk.writeln; // 559E4FBA4A50

  "Merhaba".writefln("%s", ilk);  // Merhaba
  "Merhaba".writefln("%s", *ilk); // Merhaba

  "Merhaba".write;
  for(auto i = ilk; *i; i++) {
    write(*i);
  }
  writeln; // Merhaba D Dili
  printf("Merhaba%s\n", ilk); // Merhaba D Dili
}

Evet öyleymiş. Demek write ailesi ile hiç c stringlerini denememişim. Güvenli olsun bizim olsun o zaman.

April 06, 2022

On Thursday, 31 March 2022 at 13:58:39 UTC, Ferhat Kurtulmuş wrote:

>

Modüller arasında isim çakışmaları için bir çözüm o zaman. Açıklamalar için teşekkürler Salih Bey.

Ferhat Hocam, yeni öğrendiğim ve şu ana kadar 2 yerde kullandığım (örneğin şu başlık), import'dan hemen sonra bir değer vererek kullanma da var. Her ikimizin de dikkatinden kaçmış olabilir.

Kolay gelsin...

1 2
Next ›   Last »