Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- übergreifende Themen (http://www.informatikerboard.de/board/board.php?boardid=20)
--- programm in c header (http://www.informatikerboard.de/board/thread.php?threadid=1767)


Geschrieben von hammala am 10.01.2014 um 22:59:

  programm in c header

Meine Frage:
Hallo, ich hab ein Problem und zwar soll ich die Funktion
int leseZeichenkette(char * zeichenkette) programmieren in einer Header-Datei. Die Fkt. soll eine Zeichenkette mit maximal 10 Zeichen einlesen und an zeichenkette schreiben. Ist die eingelesene Zeichenkette zu lang, dann Puffer leeren und -1 zurückgeben, sonst 0.

Es funktioniert einfach nicht!

Meine Ideen:
int leseZeichenkette(char * zeichenkette){
int status;

status=scanf("%s",&zeichenkette);

if(status==0 || (laengeZeichenkette(zeichenkette)>10)){
return -1;
}
return 0;
}

/*habs so probiert und über
main(){
char zeichenkette1[10];
printf("%s",leseZeichenkette(zeichenkette1));
}
in der c-Datei ausgeben wollen*/



Geschrieben von eulerscheZahl am 11.01.2014 um 08:32:

 

Zitat:
scanf("%s",&zeichenkette)

das & ist dazu da, die Speicheradresse eine Variablen zu bekommen, bei char* ist das nicht nötig, da zeichenkette dann bereits die Adresse ist.

Gleichzeitig liest du hier einen string in Zeichenkette ein, bei dem du herausfinden sollst, ob er da überhaupt hineinpasst. Du brauchst in deiner Funktion eine zweite, größere Zeichenkette, in die du zunächst einliest und dann Zeichen für Zeichen umkopierst oder du liest gleich zeichenweise ein.

Zitat:
laengeZeichenkette(zeichenkette)

hast du die Funktionüberhaupt definiert?
Zitat:
printf("%s",leseZeichenkette(zeichenkette1))

leseZeichenkette gibt aber ein int zurück, keinen string



Geschrieben von Gast am 11.01.2014 um 09:49:

 

omg ich glaubs nicht, es lag am &-Operator,
Danke!



Geschrieben von hammala am 11.01.2014 um 12:42:

 

aber leider seh ich grad, dass es nur zu 80% geht, ich lad mal die dateien hoch.
gebe zum beispiel hallo ein als die erste zeichenkette, und dann zum beispiel asdjflajdfjalkdjfakds. Dann musst du die 2. Zeichenkette nochmal eingeben, zum Beispiel allo. Dann steht dran, dass es kein Suffix ist. (war noch Teil der Aufg.) Er guckt anscheinend, ob deine zweite Zeichenkette allo ein Suffix von asdjflajdfjalkdjfakds ist.



Geschrieben von eulerscheZahl am 11.01.2014 um 13:49:

 

Was mir mehr Sorgen bereitet: Du liest immer noch eine Zeichenkette ich eine Variable ein, die möglicherweise nicht genug Speicherplatz dafür bietet:
Zitat:
status=scanf("%s",zeichenkette); //zeichenkette hat Länge 10

entsprechend wird die Bedingung
Zitat:
laengeZeichenkette(zeichenkette)>10

nie erfüllt sein - bzw. in deinem Programm funktioniert es bei mir, aber die Funktion laengeZeichenkette kommt in einen Bereich, in dem eigentlich schon etwas ganz anderes steht.

So würde ich es lösen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
int leseZeichenkette(char* zielZeichenkette)
{
	int i = 0; //aktuelle Position/Länge des strings
	char c; //aktuell eingelesenes Zeichen, also zeichenkette[i]
	while(i < MAX_LAENGE) //solange wir die Maximallänge nicht erreicht haben
	{
		c = getchar(); //liest nächstes Zeichen ein
		if(c == '\n') //wenn es ENTER ist, abbrechen
			break;
		zielZeichenkette[i] = c; //schreibe eingelesenen Zeichen in Zeichenkette
		i++; //erhöhe Schreibposition
	}
	if(c != '\n') //Wenn kein ENTER, also wenn die Zeichenkette zu lang war
        {
		i = 0; //setze Position auf 0
		leeren(); //aufräumen, damit der Rest nicht beim nächsten Funktionsaufruf dazukommt
        }
	for(; i < MAX_LAENGE; i++) //leere den String von der letzten Schreibposition (0 bei Überlauf) aus 
		zielZeichenkette[i] = '\0';
	if(c != '\n')
		return -1; //bei Überlauf Fehler zurückgeben
	return 0; //OK zurückgeben
}



Geschrieben von hammala am 11.01.2014 um 16:07:

 

danke! mein problem hat sich jetzt auch gekärt


Forensoftware: Burning Board, entwickelt von WoltLab GmbH