Array of strings

Hallo zusammen,

fange gerade an mich in C++ einzuarbeiten und habe folgenden Code zusammengesucht:

#include 

int GetDirInfo(char FileItems[255][255], char DirItems, unsigned long Ecode)
{

 WIN32\_FIND\_DATA FindFileData;
 HANDLE hFind = INVALID\_HANDLE\_VALUE;
 DWORD dwError;

 hFind = FindFirstFile("C:\\*", &FindFileData);

 if (hFind == INVALID\_HANDLE\_VALUE) 
 {
 return (GetLastError());
 } 
 else 
 {
 FileItems = FindFileData.cFileName;
 while (FindNextFile(hFind, &FindFileData) != 0) 
 {
 FileItems = FindFileData.cFileName;
 }

 dwError = GetLastError();
 FindClose(hFind);
 if (dwError != ERROR\_NO\_MORE\_FILES) 
 {
 return (dwError);
 }
 }
 return (0);
}

void main()
{
 char FileItems[255][255];
 char DirItems[255][255];
 unsigned long ECode;

 GetDirInfo(FileItems, DirItems, Ecode);
}

Leider spuckt der Kompiler einen Fehler aus:

error C2440: ‚=‘ : ‚char [260]‘ kann nicht in ‚char [][255]‘ konvertiert werden

bei der Zuweisung der Dateiname…

Wie muss ich hier Konvertieren? Möchte auch gerne die Arrays als Pointer übergeben. Wie geht das? Und wie indexiere ich dann in der Funktion im Array???

Schon mal Danke für euere Bemühungen…

VDB

Hallo,

error C2440: ‚=‘ : ‚char [260]‘ kann nicht in ‚char [][255]‘
konvertiert werden

Du probierst, einem Array von Strings einen String zuzuweisen. Das geht nicht, du kannst höchstens einem Element des Arrays den String zuweisen, z.B. indem du einen index mitzählst:

int i = 0
while (i 
Oder eventuell


    strncpy(FileItems[i], FindFileData.cFileName, 255);



Wobei du ev. die zweite Grenze von 255 auf 260 anheben solltest...

HTH,
Moritz

Danke Moritz,

das funktioniert jetzt!! Kannst du mir noch sagen wie ich die Arrays als Pointers übergeben kann und in der Fuktion auf diese Pointers zugreife?

Gruß

VDB

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo VDB

fange gerade an mich in C++ einzuarbeiten und habe folgenden
Code zusammengesucht:

[CODE]

Moritz hat Dich bereits auf die wesentlichen Probleme
hingewiesen. Man kann nicht den Inhalt eines Strings
per ‚=‘ an einen anderen String zuweisen - in C/C++.

Wie muss ich hier Konvertieren? Möchte auch gerne die Arrays
als Pointer übergeben. Wie geht das? Und wie indexiere ich
dann in der Funktion im Array???

Arrays werden immer in C/C++ als ‚Pointer‘
(by reference) an Funktionen übergeben, es ist
sogar schwierig, sie nicht als Pointer zu
übergeben.

Aus Deinem Quelltext kann ich „ungefähr“ erraten, was
Du vorhast. Ich habe mal Deinen Code etwas verkürzt und
dafür die Funktionalität eingebaut, die ich glaube dass
Du sie haben wolltest. Den Charakter Deines Codes habe
ich weitestgehend beibehalten (versucht).

Ich stelle das jetzt ohne Kommentar rein, es ist Deine
Aufgabe, das durchzuackern, zuverstehen und ggf. Fragen
zu stellen.

Grüße

CMБ

 #include 
 #include 
 
 /\* #define MAX\_PATH 255 --\> MAX\_PATH ist bereits definiert, windows.h \*/
 #define MAX\_FILES 100

 typedef struct { char\* dateien; int dAnzahl,fAnzahl; } SUCHE;

 int GetDirInfo(SUCHE \*pinf, char FileItems[MAX\_FILES][MAX\_PATH], char DirItems[MAX\_FILES][MAX\_PATH] )
{
 WIN32\_FIND\_DATA FindFileData;
 HANDLE hFind = FindFirstFile(pinf-\>dateien, &FindFileData);

 if( hFind == INVALID\_HANDLE\_VALUE ) 
 return -1;

 do 
 if( FindFileData.dwFileAttributes & FILE\_ATTRIBUTE\_DIRECTORY) {
 strncpy( DirItems[pinf-\>dAnzahl++], FindFileData.cFileName, MAX\_PATH-1 );
 }
 else {
 strncpy( FileItems[pinf-\>fAnzahl++], FindFileData.cFileName, MAX\_PATH-1 );
 }
 while( FindNextFile(hFind, &FindFileData) != 0 );

 FindClose(hFind);

 return 0;
}

 int main()
{
 char FileItems[MAX\_FILES][MAX\_PATH];
 char DirItems [MAX\_FILES][MAX\_PATH];
 int error, f, d;
 
 SUCHE suche;
 suche.dateien = "C:\\Temp\\Test\\*.\*"; 
 suche.dAnzahl = suche.fAnzahl = 0;
 error = GetDirInfo( &suche, FileItems, DirItems );

 if( !error ) {
 printf("%d Verzeichnisse und %d Dateien gefunden\n", suche.fAnzahl, suche.dAnzahl);
 for(d=0; d

Hallo,

das funktioniert jetzt!! Kannst du mir noch sagen wie ich die
Arrays als Pointers übergeben kann und in der Fuktion auf
diese Pointers zugreife?

wenn du ein array hast

int[] a = {1, 2, 3, 4, 5};

dann ist der Name des Arrays gleichzeitig ein Pointer auf das erste Element.
D.h. du kannst so Sachen schreiben wie

int \*b = a;
b++;

dann zeigt b jetzt auf die 2, also b[0] == 2 und b[1] == 3.

Also: Arrays sind Zeiger.

Grüße,
Moritz

#include 
#include 
using namespace std;

int GetHelp(vector &vs)
 {
 vs.push\_back("Ein vector kann ");
 vs.push\_back("wie ein Stack ");
 vs.push\_back("benutzt werden ");
 vs.push\_back("stecke beliebig viele strings ");
 vs.push\_back("dort rein. ");

 vs.push\_back("Die FindDirstFile() ");
 vs.push\_back("zeigt dir übrigens nur dateien an, ");
 vs.push\_back("keine Ordner, ");
 vs.push\_back("daher sind mit 'C:\\' nur dateien ");
 vs.push\_back("zu kriegen. ");
 return 0;
 }

int main()
 {
 vector vs;
 GetHelp(vector vs);
 // i 

lg
amando

Hallo amando

ich weiss zwar nicht genau was Dein Punkt ist,
aber:

int GetHelp(vector &vs)
{
vs.push_back("Ein vector kann ");
vs.push_back("wie ein Stack ");
vs.push_back("benutzt werden ");


return 0;
}

Ist das nicht dieser „furchtbare“

 void SedgeWickStil(STIL Stil) 
 {
 return 0;
 }

… wo man erstmal den Kopf schräghalten muss :wink:)

vs.push_back("Die FindDirstFile() ");
vs.push_back("zeigt dir übrigens nur dateien an, ");
vs.push_back("keine Ordner, ");
vs.push_back("daher sind mit ‚C:\‘ nur dateien ");
vs.push_back("zu kriegen. ");

Und das ist (imho) falsch. Unter Windows
ist ein Ordner ein File mit dem Attribut ‚Dir‘,
oder nicht?

Grüße

CMБ