Du bist nicht angemeldet.

Werbeanzeige

1

28.02.2020, 17:23

C++ snprintf() unter Code Blocks verwenden (sprintf_s funktioniert nur unter Visual Studio)

Für alle die sich wie ich gewundert haben warum sprintf_s nicht unter Code Blocks funktioniert - hier ein kleiner Codeausschnit:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdio.h> // nötig für snprintf()

using namespace std;

int main()
{
    char buffer[60];
    char name[30] = "Hans";
    int punkte = 430;

    // String zusammenbauen
    snprintf(buffer, 60, "Spieler %s hat %i Punkte erreicht.",
            name, punkte);

    cout << buffer << endl;

    return 0;
}


Das ganze funktioniert fast genauso wie sprintf_s auch. Mit dem unterschied das der zweite Parameter angibt wie groß die Zeichenkette maximal sein darf. Alle Zeichen die über diesen Wert hinausgehen werden einfach verworfen.

2

28.02.2020, 17:58

Weiß deine Mühe ja zu schätzen, aber:

Warum Code::Blocks verwenden?
Letztes Release liegt 3 Jahre zurück...

Warum das Ganze mit der (unsicheren) Funktion snprintf und nicht mit Strings lösen?
fka tm

3

28.02.2020, 18:15

Was wäre den eine gute IDE-Alternative? Eclipse oder Visual Studio Code vielleicht? Habe Code Blocks verwendet weil es in einem (älteren) youtube Video empfohlen wurde.

Wie löst man das ganze mit strings? Steht das auch im C++ Buch?

4

28.02.2020, 18:51

Visual Studio Community zum Bleistift. ;)

Kenne das C++ Buch nicht.
Wenn Strings darin nicht behandelt werden, wirst du bei Google (C++ Strings) bestimmt fündig.
fka tm

5

29.02.2020, 10:44

Hab mal ein bisschen gegoogelt und die Antwort heißt string streams. Hier der Code dazu:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream> // nötig fur ostringstream

using namespace std;

int main()
{
    ostringstream buffer;
    string name = "Hans";
    int punkte = 430;

    // String zusammenbauen
    buffer << "Spieler " << name << " hat " << punkte << " Punkte erreicht.";

    // buffer in string kopieren
    string myString = buffer.str();

    // string ausgeben
    cout << myString;
    
    return 0;
}

dot

Supermoderator

Beiträge: 9 855

Wohnort: Graz

  • Private Nachricht senden

6

01.03.2020, 16:28

std::cout ist ein Outputstream. Gibt keinen Grund hier erst einen String zusammenzubauen und diesen dann auszugeben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <string>
#include <iostream>

int main()
{
    std::string name = "Hans";
    int punkte = 430;

    std::cout << "Spieler " << name << " hat " << punkte << " Punkte erreicht.";
}

tut's auch ;)

7

01.03.2020, 20:21

Oha. Stimmt. Aber wozu nützt das ganze string zusammenbasteln überhaupt? Oder besser gesagt - wann macht es Sinn?

David Scherfgen

Administrator

Beiträge: 10 246

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

01.03.2020, 20:28

Wenn du den String in einer Variablen für spätere Verarbeitung zwischenspeichern möchtest.

Jonathan

Community-Fossil

  • Private Nachricht senden

9

07.03.2020, 14:10

Da sowohl print als auch stringstreams nicht gerade hübsch sind (letztere weil man sie z.b. nicht inline benutzen kann), möchte ich an dieser Stelle kurz darauf hinweisen, dass es da auch etwas Neues gibt (geben wird):

https://en.cppreference.com/w/cpp/utility/format/format
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige