Chapter 10 Strings and Pointers

1 / 27

# Chapter 10 Strings and Pointers - PowerPoint PPT Presentation

Chapter 10 Strings and Pointers. Introduction. String Constant Example: printf(“Hello”); “Hello” : a string constant A string constant is a series of characters surrounded by double quotes. How to declare a variable to store string values?

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'Chapter 10 Strings and Pointers' - gareth-kaufman

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Introduction
• String Constant
• Example: printf(“Hello”);
• “Hello” : a string constant
• A string constant is a series of characters surrounded by double quotes.
• How to declare a variable to store string values?
• Represent a string using a one-dimensional array of type char

char string[size];

• Question: The size of a character array is fixed, how can this variable take string constants with different lengths as values?
Outline
• String:
• Representation of a string: \0
• Using scanf to read in string
• Initilization of strings
• String-Handling Functions in the Standard Library
• Passing Arguments to main() using an array of strings
The End-of-String Sentinel \0
• A string is
• a one-dimensional array of type char.
• char w[100];
• character value \0 is used to terminate a string
• strings have a variable length delimited by the null character \0 but with a maximum length determined by the size of the character array
• The size of the string must include the storage needed for the null character \0.
The End-of-String Sentinel \0

the null character value \0 is used to terminate a string

• Example:

#include <stdio.h>

int main(void){

char w[100];

w[0]='A';

w[1]='B';

w[2]='C';

w[3]='\0';

w[4]=‘D';

printf("%s\n", w);

}

#include <stdio.h>

int main(void){

char w[100];

w[0]='A';

w[1]='B';

w[2]='C';

w[3]='\0';

printf("%s\n", w);

}

% a.out

ABC

% a.out

ABC

The End-of-String Sentinel \0

The size of the string must include the storage needed for the null character \0.

• Example:

#include <stdio.h>

int main(void){

char w[3];

w[0]='A';

w[1]='B';

w[2]='C';

w[3]='\0';

printf("%s\n", w);

}

overrun the bounds of w

Outline
• String:
• Representation of a string: \0
• Using scanf to read in string
• Initilization of strings
• String-Handling Functions in the Standard Library
• Passing Arguments to main() using an array of strings
• Using scanf to read in a string
• scanf(“%s”, w);
• read in non-white space characters
• positions the input stream to an initial non-white space character
• read in non-white space characters
• The process stops when a white space character or EOF is encountered.
• a null character is placed in memory to end the string.

scanf(”%s”,w);

• read in non-white space characters
• positions the input stream to an initial non-white space character
• read in non-white space characters
• The process stops when a white space character or EOF is encountered.
• a null character is placed in memory to end the string.

#include <stdio.h>

int main(void){

char w[10];

printf("Enter strings\n", w);

scanf("%s", w);

printf("%s\n", w);

}

% a.out

Enter strings

Hello

Hello

% a.out

Enter strings

Hello World

Hello

Outline
• String:
• Representation of a string: \0
• Using scanf to reading string
• Initilization of strings
• String-Handling Functions in the Standard Library
• Passing Arguments to main() using an array of strings
Initialization of Strings
• Initialization of Strings
• Example: initialize a string variable as “abc”
• char s[] = {‘a’, ‘b’, ‘c’, ‘\0’};
• char s[]=“abc”;

#include <stdio.h>

int main(void){

char w[]="abc";

printf("%d\n", sizeof(w));

}

% a.out

4

The size of the string must include the storage needed for the null character \0.

Initialization of Strings
• A pointer to char can also be initialized with a constant string.
• A string constant is stored in memory by the compiler.
• the pointer is assigned the address of the constant string in memory.
• Example: char p* = “abc”;

#include <stdio.h>

int main(void){

char *p="abc";

printf("%s\n",p);

}

% a.out

abc

Initialization of Strings
• Difference between
• initializing an array with a constant string and
• initializing a pointer with a constant string

#include <stdio.h>

int main(void){

char s[]="abcdefg";

char *p="abcdefg";

printf("%s\n",s);

printf("%s\n",p);

printf("%d\n",sizeof(p));

printf("%d\n",sizeof(s));

}

% a.out

abcdefg

abcdefg

4

8

4 bytes is used to represent a memory address

Initialization of Strings
• Difference between
• initializing an array with a constant string
• the array contains the individual characters followed by the null character
• initializing a pointer with a constant string
• A string constant is stored in memory by the compiler.
• the pointer is assigned the address of the constant string in memory.

Examples:

Process a string using array notation with subscripts

#include <stdio.h>

int main(void){

char c, name[100];

int i;

printf("Enter a Message:\n");

for (i=0; (c=getchar())!='\n'; ++i)

name[i]=c;

name[i]='\0';

for (i=0; name[i]!='\0'; ++i) {

if(isupper(name[i]))

name[i]=tolower(name[i]);

else if(islower(name[i]))

name[i]=toupper(name[i]);

}

printf("\n%s\n", name);

}

% a.out

Enter a Message:

Have a Good Day!

hAVE A gOOD dAY!

Examples:

Process a string using pointer

#include <stdio.h>

int main(void){

char c, name[100], *p;

int i;

printf("Enter a Message:\n");

for (i=0; (c=getchar())!='\n'; ++i)

name[i]=c;

name[i]='\0';

for (p=name; *p!='\0'; ++p) {

if(isupper(*p))

*p=tolower(*p);

else if(islower(*p))

*p=toupper(*p);

}

printf("\n%s\n", name);

}

% a.out

Enter a Message:

Have a Good Day!

hAVE A gOOD dAY!

Examples:

Process a string using pointer

#include <stdio.h>

int main(void){

char s[] = "Hello World";

printf("%s\n", s);

printf("%s\n", s+1);

printf("%s\n", s+2);

}

% a.out

Hello World

ello World

llo World

Outline
• String:
• String-Handling Functions in the Standard Library
• Passing Arguments to main() using an array of strings
String-Handling Functions in the Standard Library
• String-handling functions:
• Function prototypes are provided by string.h
• #include <string.h>
• Functions:
• Concatenate two strings: strcat (s1, s2);
• Compare two strings: int strcmp (s1, s2);
• Copy s2 to s1: strcpy (s1, s2);
• Length of a string: strlen (s);
String-Handling Functions in the Standard Library
• char &strcat (char *s1, const char *s2);
• Concatenates s1 and s2, the result is put in s1. The string s1 is returned.

#include <stdio.h>

#include <string.h>

int main(void){

char s1[100] = "Good Day";

char s2[100] = "Hello World";

strcat(s1, s2);

printf("s2=%s, s1= %s\n", s2, s1);

strcat(s1, s2+6);

printf("s2=%s, s1= %s\n", s2, s1);

}

% a.out

s2=Hello World, s1= Good DayHello World

s2=Hello World, s1= Good DayHello WorldWorld

String-Handling Functions in the Standard Library
• int strcmp (const char &s1, const char *s2);
• An integer is returned that is less than, equal to, or greater tan zero, depending on whether s1 is lexicographically less than, equal to, or greater than s2

#include <stdio.h>

#include <string.h>

int main(void){

char s1[100] = "Good Day";

char s2[100] = "Hello World";

printf("%d\n", strcmp(s1, s2));

printf("%d\n", strcmp(s1, s1));

printf("%d\n", strcmp(s2, s1));

}

% a.out

-1

0

1

String-Handling Functions in the Standard Library
• char *strcpy (char *s1, const char *s2);
• s2 is copied into s1 until \0 is moved. Whatever exists in s1 is overwritten.
• It is assumed that s1 has enough space to hold the result.
• The value s1 is returned.

#include <stdio.h>

#include <string.h>

int main(void){

char s1[100] = "Good Day";

char s2[100] = "Hello World";

strcpy(s1, s2);

printf("s2=%s, s1= %s\n", s2, s1);

strcpy(s1+1, s2);

printf("s2=%s, s1= %s\n", s2, s1);

strcpy(s1+1, s2+6);

printf("s2=%s, s1= %s\n", s2, s1);

}

% a.out

s2=Hello World, s1= Hello World

s2=Hello World, s1= HHello World

s2=Hello World, s1= HWorld

String-Handling Functions in the Standard Library
• unsigned strlen (const char *s);
• A count of the number of characters before \0 is returned.

#include <stdio.h>

#include <string.h>

int main(void){

char s1[100] = "Good Day";

printf("%d\n", strlen(s1));

}

% a.out

8

Outline
• String:
• String-Handling Functions in the Standard Library
• Passing Arguments to main() using an array of strings
Passing Arguments to main()
• How main() communicates with the operating system?
• int main(void)
• int main( int argc, char *argv[])
• argc: the number of the command line arguments
• argv: an array of strings
Passing Arguments to main()

#include <stdio.h>

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

int i;

printf("%d \n", argc);

for (i=0; i < argc; ++ i)

printf("%s\n", argv[i]);

}

%a.out Hello World

3

a.out

Hello

World

Summary
• String:
• Representing a string using an array of characters
• \0 is used to terminated a string
•  strings have a variable length delimited by the null character \0 but with a maximum length determined by the size of the character array
• initialization of strings
• String-Handling Functions in the Standard Library
• Passing Arguments to main()
• argc: number of arguments
• argv: an array of strings