The difference in string and char[], readf() and scanf()

Dennis Ritchie via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Mar 21 13:02:38 PDT 2015


On Saturday, 21 March 2015 at 19:09:59 UTC, FG wrote:
> In what universe?! Which OS, compiler and architecture?

On Saturday, 21 March 2015 at 19:09:59 UTC, FG wrote:
> In what universe?! Which OS, compiler and architecture?

Windows 8.1 x64, dmd 2.066.1:

import std.range, std.stdio;

void main () {

      stdout = File("in.txt", "w");

      'a'.repeat(100000).writeln;
}

import std.stdio;
import std.cstream;

void main () {

      freopen("in.txt", "r", din.file);
      freopen("out.txt", "w", dout.file);

      char[100000] a;

      scanf("%s", a.ptr);

      int lenA;
      foreach (i; 0 .. 100000) {
          if (a[i] == 'a')
              ++lenA;
          printf("%c", a[i]);
      }

      printf("\n%d\n", lenA); // 32767
}

By the way, in Ubuntu 14.04 LTS (dmd 2.066.1) everything works
fine:
#!/usr/bin/rdmd

import std.range, std.stdio;

void main () {

      stdout = File("in.txt", "w");

      'a'.repeat(100000).writeln;
}

#!/usr/bin/rdmd

import std.stdio;
import std.cstream;

void main () {

      freopen("in.txt", "r", din.file);
      freopen("out.txt", "w", dout.file);

      char[100000] a;

      scanf("%s", a.ptr);

      int lenA;
      foreach (i; 0 .. 100000) {
          if (a[i] == 'a')
              ++lenA;
          printf("%c", a[i]);
      }

      printf("\n%d\n", lenA); // 100000
}


More information about the Digitalmars-d-learn mailing list