Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » strlen meckert rum

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.04.2008, 21:02 Uhr
~Animal21
Gast


hi

ich benutz in einer meiner Funktionen, die Fkt strlen um die länge eines char zu ermitteln, aber der gibt mir immer folgende Fehlermeldung wieder:

error C2664: 'strlen' : Konvertierung des Parameters 1 von 'char' in 'const char *' nicht moeglich
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat


hab <string.h> eingebunden

meine Funktion:


C++:
int indexOf(char text, char searchtext)
{
    int i=0;

    if (strlen(text) >= strlen(searchtext))
    {
        while ( i > strlen(text) - strlen(searchtext) )
        {
            if (SubString(text, i, i + strlen(searchtext) ) == searchtext )
            {
                return i;
            }

            i++;
        }
    }
    return -1;
}




mfg
ani
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.04.2008, 21:56 Uhr
0xdeadbeef
Gott
(Operator)


char ist nur ein einzelner Buchstabe, strlen erwartet aber einen String, was in C ein Zeiger auf char ist. Also

C++:
int indexOf(char const *text, char const *searchtext) {


...oder du könntest einfach strstr benutzen, bzw. indexOf mit strstr implementieren -

C++:
#include <stddef.h> /* für size_t und NULL */
#include <string.h> /* für strstr */

size_t indexOf(char const *haystack, char const *needle) {
  char const *p = strstr(haystack, needle);
  if(p == NULL) {
    return -1;
  }
  return p - haystack;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 18.04.2008 um 21:57 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.04.2008, 09:34 Uhr
~Animal21
Gast



Zitat:
size_t indexOf(char const *haystack, char const *needle) {
char const *p = strstr(haystack, needle);
if(p == NULL) {
return -1;
}
return p - haystack;
}


ich versteh leider nicht ganz was des macht:<


C++:
int indexOf(char const *text, char const *searchtext)
{
    int i=0;

    if (strlen(text) >= strlen(searchtext))
    {
        while ( i > strlen(text) - strlen(searchtext) )
        {
            if (SubString(text, i, i + strlen(searchtext) ) == searchtext )
            {
                return i;
            }

            i++;
        }
    }
    return -1;
}


(17) : error C2446: '==' : Keine Konvertierung von 'const char *' in 'int'
(17) : error C2040: '==' : 'int' unterscheidet sich von 'const char *' in bezug auf die Anzahl vorgenommener Dereferenzierungen
Fehler beim Ausführen von cl.exe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.04.2008, 11:06 Uhr
~Animal21
Gast


wenn ich const char* steht char const * nehme, meckert der nicht mehr rum ^^

die IndexOf Fkt benutz ich in einer anderen Funktion noch, ie verschiedene Zahlensysteme ineinander umrechnet; hier der Kopf:
const char* ConvertNumber(const char* number, const char* base_alphabet_from, const char* base_alphabet_to)

in folgender zeile sagt mir jetzt:

C++:
//deklaration
    int base_from = strlen(base_alphabet_from);
    int base_to = strlen( base_alphabet_to );
    int result_modulo = indexOf ( base_alphabet_from, SubString ( number, 0, 1 ));
    int index=0;
    int result_div;
    char* null_from = SubString ( base_alphabet_from, 0, 1 );
    char* new_number = "";
    char* result_division = ""
//deklaration ende

        result_division = result_division + SubString ( base_alphabet_from, result_div, result_div + 1 );

.
.
.

    result_division = result_division + null_from;

.
.
.

    new_number = SubString ( base_alphabet_to, result_modulo, result_modulo + 1 ) + new_number;




bei allen dreien sagt der mir: error C2110: Zwei Zeiger koennen nicht addiert werden
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.04.2008, 17:36 Uhr
0xdeadbeef
Gott
(Operator)


char const * und const char * sind das selbe. Ich bevorzuge die erstere Schreibweise, weil es konsistent ist mit konstanten Zeigern a la

C++:
char const *const p; /* im Gegensatz zu */
const char *const p;



Dass der dir sagt, zwei Zeiger könnten nicht addiert werden, liegt daran, dass Zeiger nicht addiert werden können. Prinzipiell wäre es wohl möglich, das zu tun, aber dabei käme nur Blödsinn heraus - Zeiger sind ja nichts anderes als Speicheradressen.

Übrigens,

C++:
char* result_division = "";


ist schon falsch, weil "" ein String-Literal und als solches konstant ist, du es aber als Variable zuweist. Das führt eher früher als später zu Speicherfehlern.

Insgesamt würde ich sagen, du solltest dir das Kapitel über Stringbehandlung in deinem C-Buch nochmal etwas genauer ankucken; dir scheinen hier wirklich die Grundlagen zu fehlen. Von besonderem Interesse sind in diesem Zusammenhang strcmp, strncat und strncpy.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.04.2008, 18:04 Uhr
~Animal21
Gast


hab leider kein c buch XD

kennst du vll ne gute seite wo das steht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.04.2008, 07:09 Uhr
0xdeadbeef
Gott
(Operator)


Dann solltest du dir aber schleunigst eins zulegen. Wir reden hier nicht von PHP oder vergleichbar simplem Kleinkram, den man sich aus ein paar Webseiten zusammenreimen könnte.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.04.2008, 11:03 Uhr
~Animal21
Gast


hm ok, dann aber hier die gleiche frage, kannste da was empfehlen?

weil ich denk mal, dass es mit Sicherheit unmengen von Literatur gibt, die unterschiedliches ansehn haben, odeR?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: