Inhalt eines pointers auslesen (c++)?

2 Antworten

dass es sich bei der char c um einen pointer handelt.

Daran wird es am allerwenigsten liegen, denn: In deinem Beispiel kommt kein einziger Pointer vor...

Aber es könnte sein, dass die Funktion "_countof" (wo hast die überhaupt her? "Normales" C/C++ is das jedenfalls nich...) einen benötigt...

Also so wie das ganze aussieht, hast du irgendwo ein char-Array bzw. nen char-Pointer (aka C-String) und willst die Länge dessen ermitteln...

Das dürfte so gehen:

#include <string.h> //Für strlen()

//const char *c = ein C-String, dessen Inhalt nich (ohne weiteres) verändert werden kann.
void abc(const char *c){
int x = strlen(c); //x enthält jetzt die Länge des C-Strings c ohne das abshließende '\0'
printf("%i", x);
}

int main(int argc, char *argv[]){
abc("foo.bar"); //Aufruf der Funktion abc mit einem (Constant-)C-String-Literal als Parameter
}

Allerdings sind da noch ein paar Kleinigkeiten:

es zwingend notwendig ist, dass ich die Länge einer char aus einer Funktion bestimmen kann.

Ein "char" hat keine Länge (bzw. nicht in dem Sinne), ein C-String (char-Array bzw. char-Pointer dagegen schon.)

Gibt es eine Möglichkeit den Pointer innerhalb der Funktion zu einer normalen char "umzuwandeln"?

"Mehrere":

void foo(char *c){
char a = *c;
char b = c[0];
//usw...
}

Ich bin jetzt kein c++ Spezialist, aber das hat nichts mit einem Pointer zu tun (falls Du die Fehlermeldung mal genau lesen willst):

https://msdn.microsoft.com/de-de/library/ms175773(v=vs.120).aspx

_countof erwartet als Input ein Array und liefert die Anzahl der Elemente in dem Array. Char ist halt nun mal kein Array ... was soll _countof(Char) Deiner Meinung nach sein? Die Länge eines Char ist immer 1, da der Datentyp char per Definition immer einen einzigen Buchstaben enthält.

Was Du wahrscheinlich erreichen willst, ist etwas in der Art - text[] ist dann aber genau das erwartete Array

char text[] = "blabla";

int x = _countof(text)

Allgemeine Fragen zu C++ und Fehlersuche?

Hallo zusammen,

gestern habe ich mit C++ angefangen. Jahrelang habe ich nur mit Basic programmiert.

Nun hatte mein gelbes Buch die Aufgabe gestellt, ein einfaches Programm zu erstellen, welches ein Nahrungsmittel einspeichert sowie die Kalorien. Diese sollen dann auch ausgegeben und zusätzlich in Joule umgerechnet werden.

#include <iostream>
#include <cstring>

using namespace std;

class Nahrungsmittel {
  private:
    char *Name;
    int kcal;

    void setName(char name[]);
    void setkcal(int Kalorien);

  public:
    Nahrungsmittel(char *N,int Kalorieren) {
      Name = new char(strlen(N) + 1); // +1 Für die Binäre Null am Ende !!
      strcpy(Name, N);
      kcal = Kalorieren;
    }

    ~Nahrungsmittel() {
      delete[] Name;
    }

    char getName() {
      return reinterpret_cast<char>(*Name);
    }

    int getkcal() {
      return kcal;
    }

    double getJoul() {
      return kcal * 4.1868;
    }
};

void Nahrungsmittel::setName(char *n) {
  Name = n;
}
                                            
void Nahrungsmittel::setkcal(int Kalorien) {
  kcal = Kalorien;
}
    
int main() {
  Nahrungsmittel Brot("Brot", 120);
  Nahrungsmittel Apfel("Apfel", 80);
  cout << "\nNahrung:" << Brot.getName() << " hat " << Brot.getkcal() << " Kalorien -> " << Brot.getJoul() << " Joul.";
  cout << "\nNahrung:" << Apfel.getName() << " hat " << Apfel.getkcal() << " Kalorien -> " << Apfel.getJoul() << " Joul.";
  return 0;
}        

Nur habe ich jetzt ein paar Fragen und bräuchte Hilfe bei einem Fehler.

Zuerst einmal dachte ich mir, da ich nicht weiß, wie groß der Name ist, dass ich über den Konstruktor den Namen übergeben lasse, und daraufhin den Speicher erst erstelle. Doch wenn ich den Namen übergeben lassen will, kommt nur der erste Buchstabe (Sorry, aber dass ganze mit Pointer und Adressen ist noch relativ verwirrend am Anfang^^).

Dann die nächste:

Im Buch wird geschrieben dass die Funktionen selber nicht in die Klassen kommen. In diesen Stehen nur die Prototypen. -> Dass verstehe ich überhaupt nicht. Vielleicht weil ich im Moment auch nur in einem File arbeite. Aber wenn ich mir einen Header einbinde, dann habe ich ja auch alle Funktionen darin enthalten. Oder sitzen die Funktionen im Header auch nicht in der Klasse und werden außerhalb deklariert?

  1. Wo liegt der Fehler dass der Name nicht richtig zurückgegeben wird?
  2. Gehört das zum ISO-Standard, dass in der Klasse nur Prototypen stehen, und die Funktion selber außerhalb definiert werden? Bzw. bringt dass Nachteile wenn ich die Funktion direkt in der Klasse erstelle?
  3. Allgemein der Code den ich da geschrieben habe.

LG

...zur Frage

Welche Webtechnologie kann ich für mein Projekt nutzen?

Hi ich habe nur grundlegende Kentnisse in HTML CSS und javascript.

Ich will ein Projekt starten das so funzen soll:

Der Benutzer A klickt auf einen Pixel. Der Pixel färbt sich rot. Wenn Benutzer B auf die Website geht dann sieht er den roten Pixel.

Das soll aber serverseitig so programmiert sein, dass da meinetwegen 15.000 Leute parallel Pixel anklicken können. Also was brauche ich da für einen Server und welche Technologie soll ich dafür nutzen? Node.js vllt? Oder HTML5?

...zur Frage

VBS o.Ä. Script um Mausklick zu generieren?

Würde gerne an der Stelle auf dem Screen, wo sich mein Mauszeiger befindet, einen Klick generieren.

Gesucht wird etwas im Format:

shell.sendkeys("{leftclick}")

Wenn möglich in einer "Programmiersprache", welche auf jedem Windowscomputer schon ohne Download weiterer Software vorhanden ist, sprich ausgeführt werden kann.

Habe mal gelesen, dass in VBS Mausklicke nicht funktionieren, aber wollte trotzdem mal nachfragen.

LG

...zur Frage

Hallo, kann mir jemand erklären wie ich die sfml 2.3.2 entweder in microsoft visual studio oder Code Blocks einbinde?

ich habe es schon oft versucht doch es kamen immer fehler (nur mit visual studio bei code Blocks weiß ich es nich wie es geht) ein fehler war zb. das die sfml-window-2.dll auf dem Coputer fehlt (habe es überprüft und sie fehlt nicht) . Würde mich freuen wenn mir jemand sagen könnte wie es richtig geht denn ich habe es anscheinend falsch gemacht . Ich habe mir videos von "InformatikTutorial" angesehen. Es ist egal ob ihr es für Code Blocks oder Visual Studio erklärt.

Eine Fehlermeldungen die ich hatte(mit Visual studio 2015): main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: virtual __thiscall sf::RenderWindow::~RenderWindow(void)" (__imp_??1RenderWindow@sf@@UAE@XZ)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: void __thiscall sf::Window::display(void)" (__imp_?display@Window@sf@@QAEXXZ)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: void __thiscall sf::RenderTarget::clear(class sf::Color const &)" (__imp_?clear@RenderTarget@sf@@QAEXABVColor@2@@Z)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall sf::Color::Color(unsigned char,unsigned char,unsigned char,unsigned char)" (__imp_??0Color@sf@@QAE@EEEE@Z)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: bool __thiscall sf::Window::isOpen(void)const " (__imp_?isOpen@Window@sf@@QBE_NXZ)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall sf::String::~String(void)" (__imp_??1String@sf@@QAE@XZ)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall sf::RenderWindow::RenderWindow(class sf::VideoMode,class sf::String const &,unsigned int,struct sf::ContextSettings const &)" (__imp_??0RenderWindow@sf@@QAE@VVideoMode@1@ABVString@1@IABUContextSettings@1@@Z)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (__imp_??0VideoMode@sf@@QAE@III@Z)" in Funktion "_main". 1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall sf::String::String(char const *,class std::locale const &)" (__imp_??0String@sf@@QAE@PBDABVlocale@std@@@Z)" in Funktion "_main". 1>C:\Users\JanLuca\Documents\Visual Studio 2010\Projects\Sfml\Debug\Sfml.exe : fatal error LNK1120: 9 nicht aufgelöste externe Verweise.

...zur Frage

Caesar verschlüsselung, problem?

Ich soll für den Informatikunterricht ein Verschlüsselungsprogramm erstellen welches die Caesarverschlüsselung benutzt, jedoch kriege ich für jeden Buchstaben die gleiche ausgabe unzwar so kleine fragezeichen, bitte um hilfe

Mein Programm:

import java.util.Scanner;

public class Caesar {

public static void main (String[] args) {

    Scanner scanner = new Scanner (System.in);

    System.out.println("Zu verschlüsselnden Text eingeben:");

    String text = scanner.nextLine(); 
    // Text eingeben

    int offset = 3;
    // Offset (Verschiebung) wählen

    char [] meinArray = text.toCharArray();
    // den Text in ein Char Array laden

    char [] meinNeuesArray = verschluesseln(offset, meinArray);
    // mit der Methode (siehe unten) "verschluesseln" ein neues 
    // Char Array mit dem verschlüsselten Text erstellen

    System.out.println("So sieht der Text verschlüsselt aus:");
    // verschlüsselten Text wieder ausgeben:

        for (int i = 0; i < meinNeuesArray.length; i++) {

            System.out.print(meinNeuesArray[i]);
        }

    scanner.close();
    }

// hier die Methode zum verschlüsseln
public static char[] verschluesseln(int offset, char[] charArray) {

    char[] cryptArray = new char[charArray.length];
    // ein leeres Char Array erstellen

    for (int i = 0; i < charArray.length; i++) {

                int verschiebung = (charArray[i] + offset)%26;
                // ursprüngliches Zeichen plus Offset modulo 26

                cryptArray[i] = (char) (verschiebung);

    }
    return cryptArray;

}

}

...zur Frage

Struct dem Unterprogramm übergeben in C?

Hallo, ich möchte im Unterprogramm meinen Struct ausgeben , weiß aber nicht was ich in die klammern schreiben soll bzw wie ich das programm zum laufen birnge. Ohne unterprogramm funktioniert alles. LG ALina

include

include

include

//bekommt pointer übergeben und gibt zeilen aus

int print_student(Student *Person){

printf("%s", (*Person).vorname);

return 0;

}

typedef struct Student {

int Matrikelnummer;

char *vorname;

char *nachname;

}Student;

int main(){

Student *Person;

Person = (Student *) malloc (sizeof(Student));

(*Person).vorname = "Max";

(*Person).nachname = "Mustermann";

(*Person).Matrikelnummer =123456;

print_student(&Student *Person);

return 0;

}

...zur Frage

Was möchtest Du wissen?