Anders Sjögren Minnen, variabler, att lagra i primärminnet forts.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Algoritmer och data strukturer -Länkade listor
De fundamentala datatyperna
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
i olika programmeringsspråk
Programmering B PHP Lektion 3
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Programmeringsteknik för Media1 & K1
William Sandqvist C:s minnesmodell.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Språket för inbyggda system 2
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Anders Sjögren Deklarationsområde och funktioner.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts. Den här bilden känner ni igen sedan tidigare. Vi skall fortsätta att prata variabeltyper.
Anders Sjögren Modulär programutveckling. Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
Mathematics 1 /Matematik 1
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Anders Sjögren Minnen, variabler, att lagra i primärminnet forts.

Anders Sjögren Fördefinierade minnes- variabeltyper int main() { chartecken; intheltal; floatflyttal; doubledubbeltFlyttal; ”

Anders Sjögren Egendefinierade minnen enum ( avklarat ) array strukturer - poster ( senare )

Anders Sjögren Array ( vektor, matris ) ett exempel som illustrerar behovet Antag att man vill mäta temperaturen flera gånger och spara värdena för statistisk behandling. Hur gör man ett program som läser in flera mätvärden?

Anders Sjögren #include int main(void) { inttemp1, temp2, temp3, temp4, temp5; inttemp6, temp7, temp8, temp9, temp10; printf("Ge temperatur --> "); scanf("%d",&temp1); printf("Ge temperatur --> "); scanf("%d",&temp2); printf("Ge temperatur --> "); scanf("%d",&temp3); printf("Ge temperatur --> "); scanf("%d",&temp4); printf("Ge temperatur --> "); scanf("%d",&temp5); printf("Ge temperatur --> "); scanf("%d",&temp6); printf("Ge temperatur --> "); scanf("%d",&temp7); printf("Ge temperatur --> "); scanf("%d",&temp8); printf("Ge temperatur --> "); scanf("%d",&temp9); printf("Ge temperatur --> "); scanf("%d",&temp10); printf("\ntemp = %d", temp1); return 0; } Varför array ? Klumpigt !

Anders Sjögren #include int main(void) { inttemp[10]; inti; for (i=0 ; i<10 ; i++){ printf("Ge temperatur %d --> ",i); scanf("%d",&temp[i]); } for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i, temp[i]); return 0; } Varför array ? Bra, hyfsat! detta skapar 10 st minnen i primärminnet ( på stacken i detta fall) som vardera kan lagra en int. En array ( vektor ) om 10 element har sett dagens ljus

Anders Sjögren #include int main(void) { inttemp[10]; inti; for (i=0 ; i<10 ; i++){ printf("Ge temperatur %d --> ",i); scanf("%d",&temp[i]); } for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i, temp[i]); return 0; } Varför array ? Bra, hyfsat! detta skapar 10 st minnen i primärminnet ( på stacken i detta fall) som vardera kan lagra en int. En array ( vektor ) om 10 element har sett dagens ljus

Anders Sjögren symboldefinitioner Maskinkod programmet Heap Stack Bytes Ett minnesutrymme, variabel, i primärminnet Ett minnesutrymme, variabel, i primärminnet som kan lagra en adress dvs en pekare. Pekaren kan tilldelas ett nytt värde. En adress, pekare vars värde är konstant.

Anders Sjögren Vad är en array ? *temp == temp[0] temp[1] temp[9] temp temp[0] temp[6] int int main(void) { inttemp[10]; inti; int main(void) { inttemp[10]; inti; Maskinkod programmet Heap Stack Bytes OBS! Första index- nummer är 0 !!

Anders Sjögren Vad är en array ? stega på index int temp[1] temp[9] temp temp[0] temp[6] int for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i, temp[i]);

Anders Sjögren Vad är en array ? stega på index int temp[1] temp[9] temp temp[0] temp[6] int for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i, temp[i]); pekarstegning effektivare = snabbare int* heltalsPekare; heltalsPekare = temp ; for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i,*heltalsPekare++); heltalspekare

Anders Sjögren Vad är en array ? stega på index int temp[1] temp[9] temp temp[0] temp[6] int for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i, temp[i]); pekarstegning effektivare = snabbare int* heltalsPekare; heltalsPekare = temp ; for (i=0 ; i<10 ; i++) printf("\ntemp %d = %d",i,*heltalsPekare++); heltalspekare ofta är kompilatorerna standardmässigt inställda på att optimera maskinkoden så indexstegning översättss till pekar- stegning vid kompilering. Vill man ändra på detta måste man ändra kompilatordirektiven. Studera detta genom att kompilera mot assemblerkod.

Anders Sjögren Längden på en array ? tänk om arrayen inte räcker till ! int main(void) { inttemp[10]; inti;

Anders Sjögren Längden på en array ? om man inte vet längden på arrayen i förväg så kan man allokera minne dynamiskt under exekvering int main(void) { inttemp[10]; inti; int main(void) { inttemp[10]; inti; int*tempPekare; intn,i,j; printf("Ange antal temperaturer --> "); scanf("%d",&n); tempPekare = (int *) calloc(n,sizeof(int)); for (i=0 ; i<n ; i++){ printf("Ge temperatur %d --> ",i); scanf("%d",tempPekare+i); }

Anders Sjögren calloc(), ur manualen Syntax #include void *calloc(size_t nitems, size_t size); Description Allocates main memory. calloc provides access to the C memory heap. The heap is available for dynamic allocation of variable-sized blocks of memory. Many data structures, such as trees and lists, naturally employ heap memory allocation. All the space between the end of the data segment and the top of the program stack is available for use in the small data models (small and medium),except for a small margin immediately before the top of the stack. This margin allows room for the application to grow on the stack, and provides a small amount of room needed by the operating system. In the large data models (compact, large, and huge), all space beyond the program stack to the end of physical memory is available for the heap. calloc allocates a block of size nitems * size. The block is cleared to 0. If you want to allocate a block larger than 64K, you must use farcalloc. Return Value calloc returns a pointer to the newly allocated block. If not enough space exists for the new block or if nitems or size is 0, calloc returns NULL.

Anders Sjögren Vad är skillnaden på de två ? < måste avallokeras av programmeraren ! inttemp[10]; int*tempPekare; tempPekare = (int *) calloc(n,sizeof(int)); Maskinkod programmet Heap Stack Bytes main() 10 st int 10 st int < avallokeras automatiskt !

Anders Sjögren Vad är skillnaden på de två ? < måste avallokeras! inttemp[10]; int*tempPekare; tempPekare = (int *) calloc(n,sizeof(int)); Maskinkod programmet Heap Stack Bytes main() 10 st int 10 st int Det är jag som programmerare som ansvarar för att minne, allokerat dynamiskt på heapen, tas bort. Annars finns de kvar så länge programmet finns kvar.

Anders Sjögren Vad är skillnaden på de två ? < måste avallokeras! inttemp[10]; int*tempPekare; tempPekare = (int *) calloc(n,sizeof(int)); Maskinkod programmet Heap Stack Bytes main() 10 st int 10 st int Jag måste också akta mig noga så jag inte skriver över adressen som nu finns lagrad i tempPekare. Om jag gör det så får jag ett borttappat ( dinglande) minne som inte kan användas eller avallokeras.

Anders Sjögren #include int main(void) { int*tempPekare; intn,i,j; printf("Ange antal temperaturer --> "); scanf("%d",&n); tempPekare = (int *) calloc(n,sizeof(int)); for (i=0 ; i<n ; i++){ printf("Ge temperatur %d --> ",i); scanf("%d",tempPekare+i); } for (i=0 ; i<n ; i++) printf("\ntemp %d = %d",i, tempPekare[i]); free(tempPekare) ; return 0; } Hela programmet

Anders Sjögren #include int main(void) { int*tempPekare; intn,i,j; printf("Ange antal temperaturer --> "); scanf("%d",&n); tempPekare = (int *) calloc(n,sizeof(int)); for (i=0 ; i<n ; i++){ printf("Ge temperatur %d --> ",i); scanf("%d",tempPekare+i); } for (i=0 ; i<n ; i++) printf("\ntemp %d = %d",i, tempPekare[i]); free(tempPekare) ; return 0; } Hela programmet för att en pekare ska kunna användas måste den peka på en känd datatyp. calloc() returnerar en pekare till typen void (ingenting) så måste pekaren ”castas” till att peka på någon känd typ.

Anders Sjögren Syntax #include or #include void *malloc(size_t size) ; Description Allocates main memory. malloc allocates a block of size bytes from the memory heap. It allows a program to allocate memory explicitly as it's needed, and in the exact amounts needed. The heap is used for dynamic allocation of variable-sized blocks of memory. Many data structures, for example, trees and lists, naturally employ heap memory allocation. All the space between the end of the data segment and the top of the program stack is available for use in the small data models, except for a small margin immediately before the top of the stack. This margin is intended to allow the application some room to make the stack larger, in addition to a small amount needed by DOS. In the large data models, all the space beyond the program stack to the end of available emory is available for the heap. Return Value On success, malloc returns a pointer to the newly allocated block of memory. If not enough space exists for the new block, it returns NULL. The contents of the block are left unchanged. If the argument size == 0, malloc returns NULL. Det finns yttterligare en funktion för dynamisk minnesallokering malloc()

Anders Sjögren Strängar att hantera text strängar är en array av tecken sista tecknet skall vara ’\0’, ASCII nr 0 strang1 strang1[0] char H e j \0 ? ? ? ? ? ? int main() { charstrang1[10]={'H','e','j','\0'}; strang1[9]

Anders Sjögren Kopiera arrayer - strängar int main() { charstrang1[10]={'H','e','j','\0'}; charstrang2[10]; char* strangPekare; strang1 strang1[0] char H e j \0 ? ? ? ? ? ? strang2 strang2[0] char ? ? ? ? ? ? ? ? ? ? strangPekare ? char

Anders Sjögren Kopiera arrayer - strängar int main() { strang2 = strang1 ; strangPekare = strang1; strang1 strang1[0] char H e j \0 ? ? ? ? ? ? strang2 strang2[0] char ? ? ? ? ? ? ? ? ? ? strangPekare ? char tilldelar bara adressen till element 0.

Anders Sjögren Kopiera arrayer - strängar #include ; int main() { strang2 = strang1 ; strcpy( strang2,strang1); strang1 strang1[0] char H e j \0 ? ? ? ? ? ? strang2 strang2[0] char ? ? ? ? ? ? H e j \0 detta löser problemet!

Anders Sjögren Matriser flerdimensionella arrayer intmain() { intmatris[10][3]; matris[8][2] = 5; 5

Anders Sjögren Sortera element i en array funktionspekare införs antag att man vill sortera bokstäverna i en sträng string string[0] char H e j \0 ? ? ? ? ? ?

Anders Sjögren Sortera element i en array funktion för detta finns redan

Anders Sjögren Sortera element i en array funktion för detta finns redan

Anders Sjögren Sortera element i en array funktion för detta finns redan qsort() i stdlib.h

Anders Sjögren Sortera element i en array funktion för detta finns redan och prototypen ser ut på följande sätt void *base är en pekare till ”vad som helst” men som kan konverteras (cast) att peka på någon känd typ. Missar man att göra en cast till känd typ så sker en implicit konvertering. I detta fall ska det vara en pekare till 1:a elementet i arrayen som skall sorteras. void qsort(void *base, size_t nelem, size_t width, int (*fcmp)(const void *, const void *));

Anders Sjögren Sortera element i en array funktion för detta finns redan och prototypen ser ut på följande sätt size_t är ett makro som i ANSI-standard anger typen på returvärdet för funktionen sizeof(). Här ska man ange hur många element det finns i arrayen som skall sorteras. void qsort(void *base, size_t nelem, size_t width, int (*fcmp)(const void *, const void *));

Anders Sjögren Sortera element i en array funktion för detta finns redan och prototypen ser ut på följande sätt size_t är ett makro som i ANSI-standard anger typen på returvärdet för funktionen sizeof(). Här ska man ange hur stort varje ( i bytes) element i arrayen som skall sorteras är. void qsort(void *base, size_t nelem, size_t width, int (*fcmp)(const void *, const void *));

Anders Sjögren Sortera element i en array funktionspekare funktion för detta finns redan och prototypen ser ut på följande sätt pekare till en funktion (funktionspekare) vars argument är två void-pekare och som returnerar en int. Denna funktion specifierar hur det skall sorteras. Funktionen döper man och skriver själv. void qsort(void *base, size_t nelem, size_t width, int (*fcmp)(const void *, const void *));

Anders Sjögren Funktionspekare på samma sätt som string är en adress till första elementet i arrayen charstring[10]; så är ett funktionsnamn utan parenteser Sorteringsordning adressen till funktionen intSorteringsordning( void * a, void * b );

Anders Sjögren Sortering implementerat #include intSorteringsordning( const void* a, const void* b); int main ( void ) { char string[10]={ '\0' } ; int i ; printf("Skriv text max 9 tecken: --> "); scanf("%s", string); qsort( (void*) string, strlen( string ), sizeof( char ), Sorteringsordning ); for ( i=0; string[i]!='\0' ; i++) printf("%c", string[i]); return 0 ; }

Anders Sjögren Funktionen Sorteringsordning() sorterar på tecknens ASCII-kod intSorteringsordning( const void* a, const void* b){ if ( *((char *)a) < *((char *)b) ) return -1 ; else if ( *((char *)a) > *((char *)b) ) return 1 ; else return 0 ; }

Anders Sjögren Funktionen Sorteringsordning() sorterar på summan av tecknens ASCII- kodbitmönster intSorteringsordning( const void* a, const void* b){ int summaA, summaB; summaA = BinSumma(*((char *)a)); summaB = BinSumma(*((char *)b)) ; if ( summaA < summaB) return -1 ; else if ( summaA > summaB) return 1 ; else if ( *((char *)a) < *((char *)b) ) return -1 ; else if ( *((char *)a) > *((char *)b) ) return 1 ; else return 0 ; }

Anders Sjögren Funktionen BinSumma() sorterar på summan av tecknens ASCII- kodbitmönster int BinSumma( char tal ) { int rest ; static intlangd = 0; langd++ ; rest = tal % 2 ; tal /= 2 ; if (tal==0 || langd==8) { /* summerar över 1 byte */ langd = 0 ; return rest ; } else return rest + BinSumma( tal ); }

Anders Sjögren #include int Sorteringsordning( const void* a, const void* b); int BinSumma( char tal ); int main ( void ) { char string[10]={ '\0' } ; int i ; printf("Skriv text max 9 tecken: --> "); scanf("%s", string); qsort( (void*) string, strlen( string ), sizeof( char ), Sorteringsordning ); for ( i=0; string[i]!='\0' ; i++) printf("%c", string[i]); return 0 ; } intSorteringsordning( const void* a, const void* b){ int summaA, summaB; summaA = BinSumma(*((char *)a)); summaB = BinSumma(*((char *)b)) ; if ( summaA < summaB) return -1 ; else if ( summaA > summaB) return 1 ; else if ( *((char *)a) < *((char *)b) ) return -1 ; else if ( *((char *)a) > *((char *)b) ) return 1 ; else return 0 ; return 0 ; } int BinSumma( char tal ) { int rest ; static intlangd = 0; langd++ ; rest = tal % 2 ; tal /= 2 ; if (tal==0 || langd==8) { /* summerar över 1 byte */ langd = 0 ; return rest ; } else return rest + BinSumma( tal ); } Hela programmet, översikt main() Sorteringordning() BinSumma()

Anders Sjögren Sortera strängarna char list[5][4] = { "cat", "car", "cab", "cap", "can" }; c a t \0 c a r c a b c a p c a n

Anders Sjögren /* qsort example */ #include int sort_function( const void *a, const void *b); char list[5][4] = { "cat", "car", "cab", "cap", "can" }; int main(void) { int x; qsort((void *)list, 5, sizeof(list[0]), sort_function); for (x = 0; x < 5; x++) printf("%s\n", list[x]); return 0; } int sort_function( const void *a, const void *b) { return( strcmp((char *)a,(char *)b) ); } Sortera strängar i sort_function() kan man använda strcmp()

Anders Sjögren _fstricmp, strcmp, strcmpi, stricmp Declaration int strcmp(const char *s1, const char*s2); Remarks strcmp performs an unsigned comparison of s1 to s2. Return Value These routines return an int value that is -< 0 if s1 < s2 -== 0 if s1 == s2 -> 0 if s1 > s2 Sortera strängar i sort_function() kan man använda strcmp()

Anders Sjögren _fstricmp, strcmp, strcmpi, stricmp Declaration int strcmp(const char *s1, const char*s2); Remarks strcmp performs an unsigned comparison of s1 to s2. Return Value These routines return an int value that is -< 0 if s1 < s2 -== 0 if s1 == s2 -> 0 if s1 > s2 Sortera strängar i sort_function() kan man använda strcmp() OBS! Å Ä Ö

Anders Sjögren strcoll Compares two strings Declaration int strcoll(char *s1, char *s2); Remarks strcoll compares the string *s1 to the string *s2, according to the collating sequence set by setlocale(). Return Value strcoll returns a value that is -< 0 if s1 < s2 -== 0 if s1 == s2 -> 0 i f s1 > s2 Sortera strängar i sort_function() kan man använda strcoll() OBS! Å Ä Ö

Anders Sjögren Sökning i strängar _fstrstr, strstr Finds the first occurrence of a substring in another string Declaration char *strstr(const char *s1, const char *s2); Remarks strstr scans s1 for the first occurrence of the substring s2. Return Value -On success, strstr returns a pointer to the element in s1 where s2 begins (points to s2 in s1). -On error (if s2 does not occur in s1), strstr returns null.

Anders Sjögren Slut