Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
a3 commented
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> int findstring(char** sp, char* tp) //Parameter: Zeiger auf Die Adresse des Zeigers von dem String, Zeiger auf die Teilzeichenkette { int anzahlTS = 0; //Variable zum hochzählen Anzahl gefundener Teilzeichenketten char* vorletzteAdresse ; //Zwischenspeicher der vorletzten Adresse einer gefundenen Teilzeichenkette char* letzteAdresse; //Zwischenspeicher der letzten Adresse || unsigned char* zw; //Zwischenspeicher der Startadresse zum suchen unsigned int weiter; //umwandlung der Adresse in eine Zahl um Berechungen durchführen zu können zw=(unsigned char*) *sp; //Setzten der Startadresse zum suchen while(strstr((char*)zw, tp)) //testen ob die suche erfolgreich ist { //wenn ja dann: vorletzteAdresse=letzteAdresse; //setze letzte auf vorletzte letzteAdresse = strstr((char*)zw, tp); //ermittle neue letzte weiter =(unsigned int) letzteAdresse+1; //setzte neuen Suchstart auf einen nach dem letzten Fund zw = (unsigned char*) weiter; //setzte neuen Suchstart anzahlTS++; //zähle anzahl gefunden hoch } if(anzahlTS>1) //wenn mehr als einmal gefunden, dann { printf("\nDie Suchzeichenkette wurde %i mal gefunden (vorletzte Adresse %p).\n\n", anzahlTS, vorletzteAdresse); //gebe Anzahl gefunden und vorletzte Adresse aus } else if(anzahlTS==1) //wenn genau einmal gefunden { printf("\nDie Suchzeichenkette wurde %i mal gefunden.\n\n", anzahlTS); //gib nur Anzahl gefunden aus } else //wenn nicht gefunden { printf("\nDie Suchzeichenkette wurde 0 mal gefunden.\n\n"); //gebe nicht gefunden aus } return anzahlTS; //Rückgabe an main } int memdump(int size, char* string) { //Parameter: länge der zeichenkette, Adresse der Zeichenkette printf("\nADDRESS:\t\t0123456789ABCDEF\n"); //ausgabe überschrift int zeilen = 0; //variable zum zählen der Zeilen unsigned int sp = (unsigned int) string; //umwandlung der adresse für Berechnungen (startadresse) unsigned int zeilenUmbruch; //zwischenspeicher für Zeilenumbruch unsigned int ep; //umwandlung der adresse für Berechnungen (endadresse) ep = ((unsigned int) string+size) | 0xf; //Berechnung der Endadresee: durch eine oder verknüpfung mit 0xf wird nur das letzte nibble auf f gesetzt sp = sp & 0xffffff0; //Berechnung der Startadresse bzw. des Vorgriffs zu adresse die auf 0 endet: durch eine und verknüpfung mit 0xffffff0 wird nur das letzte nibble auf 0 gesetzt unsigned char* cp; //adresse zur ausgabe des speicherinhaltes for(;sp<=ep;sp++) //solange aktuelle adresse kleiner gleich endadresse zähle aktuelle adresse hoch { zeilenUmbruch = sp | 0xffffff0; //oder maske auf aktuelle adresse um zu testen ob diese auf 0 endet if(zeilenUmbruch == 0xffffff0) //test ob endung auf 0 { printf("\n%p\t\t", (unsigned char*)sp); //zeilenumbruch und gebe adresse aus mit 2 tabs zeilen++; //neue zeile hinzugefügt = hochzählen } cp = (unsigned char*) sp; //umwandlung der berechnbaren adresse zu ausgabe if(*cp == NULL ) //wenn nichts im speicher dann { printf("."); //gib "." aus } else { printf("%c", *cp); //sonst gib den speicherinhalt als character aus } } printf("\n"); //zeilenumbruch return zeilen; //Rückgabe der Zeilen } int main(int argc, char** argv) { //Parameter: anzahl der vom Terminal übergebenen Parameter, Parameter array mit Strings if(argc > 3 || argc < 3){ //wenn weniger oder mehr als 3 parameter übergeben wurden, dann printf("\n Usage: ./a3 STRING SEARCHSTR \n"); //hilfe ausgeben exit(1); //programm beenden } char* string; //pointer erstellen string = (char*)malloc(strlen(argv[1])+1); //Speicherplatz im heap reservieren strcpy (string, argv[1]); //speicherplatz mit dem String füllen printf("Laenge der Zeichenkette (inkl. zero termination /0): %i Byte(s) \nSuchkriterium: %s \n",(int)(strlen(argv[1])+1), argv[2]); //Ausgabe der länge und des suchkriteriums memdump(strlen(argv[1])+1,string); //Aufruf memdump findstring(&string, argv[2]); //Aufruf findstring printf("main()\t\t\t%p\n", &main); //Ausgabe der Speicheradresse von main printf("findstring()\t\t%p\n", &findstring); //Ausgabe der Speicheradresse von findstring printf("memdump()\t\t%p\n", &memdump); //Ausgabe der Speicheradresse von memdump printf("Heap\t\t\t%p\n", string); //Ausgabe der Speicheradresse im Heap von dem String free (string); //speicher im heap wieder freigeben return 0; //programmende }//feddich
run
|
edit
|
history
|
help
0
Goodone for understanding array passing
vetor mult
Rationale Zahlen
llist.h
A_141124_arrayIguales
CheckProcessorEndianness
Don't ignore warnings
Lab 11 v.05
joseph a triangle
sample