Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'Tekststrenge
31.  Andre emner om tekststrenge

I dette kapitel diskuterer vi fortrinsvis arrays af strenge, herunder det array af strenge som kan overføres fra operativsystemet til main i et C program, når vi starter programmet fra en command prompt (shell). Vi tangerer også input/output af string i printf/scanf.

31.1 Arrays af tekststrenge31.3 Programparametre
31.2 Input og output af tekststrenge
 

31.1.  Arrays af tekststrenge
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Et array af tekststrenge kan enten forstås som en to dimensionel char tabel eller som en pointer til en char pointer

Herunder, i program 31.1, skal vi først lægge mærke til erklæringen af numbers. Vi ser at numbers er et array af strenge. numbers kan også opfattes som en to-dimensionelt char array. numbers initialiseres i samme åndedrag det erklæres, med brug af den notation vi så første gang i program 21.3 i afsnit 21.2.

1
2
3
4
5
6
7
  char *numbers[] = {"one", "two", "three"};
  char ch1, ch2, ch3, ch4;

  ch1 = **numbers;
  ch2 = numbers[0][0];
  ch3 = *(*(numbers+1) + 1);
  ch4 = numbers[2][2];
Program 31.1    Et program der allokerer og tilgår et array af tre tekststrenge.

Når vi skal følge de fire assignments efter erklæringen af numbers i program 31.1 er det meget nyttigt at se på figur 31.1. Figuren viser numbers, som referer til et array med tre pointere til strengene "one", "two"og "three".

*numbers følger den røde pointer i figur 31.1. **numbers følger den første sorte pointer til tegnet 'o'.

numbers[0] er cellen som udpeges af den røde pointer. Dette er strengen "one". numbers[0][0] er således tegnet 'o'.

numbers+1 peger på det andet element i det vandrette array. *(numbers+1) peger på strengen "two". *(numbers+1) + 1 peger på strengen "wo". *(*(numbers+1) + 1) har således værdien 'w'. Bemærk at denne værdi ikke er en pointer, men derimod et tegn.

numbers[2] peger på strengen "three". numbers[2][2] var værdien tegnet 'r' (et tegn).

Det komplette C program i program 31.2 bekræfter gennem outputtet program 31.3 at vore ræsonnementer ovenfor er korrekte.

Figur 31.1    En illustration af variablen numbers fra ovenstående program

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void) {

  char *numbers[] = {"one", "two", "three"};
  char ch1, ch2, ch3, ch4;

  ch1 = **numbers;
  ch2 = numbers[0][0];
  ch3 = *(*(numbers+1) + 1);
  ch4 = numbers[2][2];  

  printf("ch1 = %c, ch2 = %c, ch3 = %c, ch4 = %c\n", ch1, ch2, ch3, ch4);
  
  return 0;
}
Program 31.2    Hele programmet.

1
ch1 = o, ch2 = o, ch3 = w, ch4 = r
Program 31.3    Output fra programmet.

I boksen herunder viser vi hvordan vi kunne have erklæret numbers som et to-dimensonelt array.

Variablen numbers kunne alternativt erklæres og initialiseres som char numbers[][6] = {"one", "two", "three"}

En af dagens opgaver handler om et to dimensionelt array af tekststrenge

 

31.2.  Input og output af tekststrenge
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Pointen i dette afsnit er reglerne for, hvordan "%s" virker i printf og scanf. Vi bemærker, at I scanf springer vi over white space (mellemrum, eksempelvis). Dernæst læser og opsamler scanf tegn indtil der igen mødes white space.

Leg gerne med program 31.4 og bliv dermed fortrolig med scanf på strenge.

Input af teststrenge med scanf har specielle regler

Output af tekststrenge med printf virker som forventet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>

int main(void) {
  char input[100];

  do {
    printf("Enter a string: ");
    scanf("%s", input);
    printf("You entered \"%s\"\n", input);
  }  while (strcmp(input, "exit"));
  
  return 0;
}
Program 31.4    Et program der indlæser og udskriver en tekststreng med scanf og printf.

 

31.3.  Programparametre
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Vi slutter lektionen om tekststrenge af med en kig på, hvordan vi kan overføre parametre til main fra operativsystemets command prompt eller shell.

Operativsystemet overfører et array af strenge til main funktionen med information om, hvordan programmet er kaldt

Dette giver muligheder for at overføre programparametre som tekststrenge

På det røde sted i program 31.5 ser vi parametrene til main. argc vil indeholde antallet af programparametre. argv vil indeholde et array af tekststrenge, ala strukturen i figur 31.1.

I program 31.6 ser vi med fed sort skrift en aktivering af a.out (som er det oversatte program) på tre programparametre. Outputtet fra program 31.5 er vist med rødt i program 31.6.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* Echo the command line arguments. */

#include <stdio.h>

int main(int argc, char *argv[])
{
   int   i;

   printf("\n  argc = %d\n\n", argc);
   for (i = 0; i < argc; ++i)
      printf("   argv[%d] = %s\n", i, argv[i]);
   putchar('\n');
   return 0;
}
Program 31.5    Et program der udskriver de overførte programparametre.

1
2
3
4
5
6
7
8
[normark@localhost strings]$ a.out programming in C

  argc = 4

   argv[0] = a.out
   argv[1] = programming
   argv[2] = in
   argv[3] = C
Program 31.6    Input til (fed) og output (rød) fra programmet.

Genereret: Onsdag 7. Juli 2010, 15:12:16
Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'