CPSC 111

Chapter 10 Strings and Pointers
1
Introduction
String Constant
 Example: printf(“Hello”);
“Hello” : a string constant
o 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?
2
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
3
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.
4
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';
printf("%s\n", w);
}
% a.out
ABC
#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);
% a.out }
ABC
5
The End-of-String Sentinel \0
Example:
The size of the string must include the storage
needed for the null character \0.
#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
6
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
7
Using scanf to reading string
Using scanf to read in a string
 scanf(“%s”, w);
read in non-white space characters
o positions the input stream to an initial non-white
space character
o read in non-white space characters
o The process stops when a white space character or
EOF is encountered.
a null character is placed in memory to end the
string.
8
Using scanf to reading 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
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.
9
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
10
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.
11
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
12
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
13
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.
14
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!
15
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!
16
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
17
Outline
String:
String-Handling Functions in the Standard
Library
Passing Arguments to main() using an array
of strings
18
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);
19
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
20
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
21
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
22
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
23
Outline
String:
String-Handling Functions in the Standard
Library
Passing Arguments to main() using an array
of strings
24
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
25
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
26
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
27