Unterschiedlich lange char Arrays kopieren



  • Also

    char a[100] = {0};
    

    füllt den Array nicht.

    std::vector<char> a(100, 0);
    

    funktioniert zwar, aber wenn ich dann a per fwrite streamen will

    std::vector<char> a(100, 0);
    FILE *out = fopen("C:\\out.txt", "wb");
    fwrite(a, 1, 100, out);
    

    sagt Visual Studio:
    cannot convert from 'class std::vector<char,class std::allocator<char> >' to 'char'
    No user-defined-conversion operator avaliable that can perform this conversion, or the operator cannot be called



  • dann versuch's mal mit &a[0] statt a ander Stelle. Aber für sowas würd ich Dir std::string und streams empfehlen. Damit geht sowas ganz einfach.

    MfG Jester



  • Praetorian schrieb:

    Also

    char a[100] = {0};
    

    füllt den Array nicht.

    Laut Standard sollte es das aber, nennt sich zero-initialization. Der GCC und MSC macht das auch problemlos. Welchen Compiler hast du denn?



  • groovemaster schrieb:

    Praetorian schrieb:

    Also

    char a[100] = {0};
    

    füllt den Array nicht.

    Laut Standard sollte es das aber, nennt sich zero-initialization. Der GCC und MSC macht das auch problemlos. Welchen Compiler hast du denn?

    sagt Visual Studio

    Ich würde auf VC 6.0 tippen 😉



  • Also _mein_ VC 6 kann das :).



  • HumeSikkins schrieb:

    Ich würde auf VC 6.0 tippen 😉

    VC 6 ist aber kein Compiler, höchstens 'ne IDE. :p
    Ne, mal im ernst. Ist zwar schon 'ne Weile her, dass ich den MSC 6 benutzt hab und IIRC konnte der das.



  • Ja, es ist Visual Studio 6.0 ( 😉 ). Stimmt, mit Nullen gehts tatsächlich. Aber gibt es auch zB eine five-initialization? Ich brauche das nämlich für beliebige Werte.



  • afaik geht sowas nur mit null, für beliebige Werte musst du dann schon eine der bereits genannten Lösungsvorschläge benutzen. Und wenn du sowas wie std::vector nicht nehmen willst (für nichtdynamische Arrays wärs dann boost::array), würde ich std::memset nehmen (doch Vorsicht, std::memset arbeitet byteweise und nicht elementweise). Oder du schaust dir mal std::fill an.



  • Aha. Und wie #include ich boost::array?



  • #include <boost/array.hpp>
    

    ?
    Wenn ich das allerdings richtig sehe, hat boost::array keinen ctor, um alle Elemente auf einen bestimmten Wert zu initialisieren. Aber den könnte man ja auch nachschieben.


Anmelden zum Antworten