CS 103 Lab 6 - Party Like A Char Star

Similar documents
EE 355 Lab 4 - Party Like A Char Star

CS 103 Lab - Party Like A Char Star

EE355 Lab 5 - The Files Are *In* the Computer

Arrays array array length fixed array fixed length array fixed size array Array elements and subscripting

Lab 8. Follow along with your TA as they demo GDB. Make sure you understand all of the commands, how and when to use them.

CS 103 Lab The Files are *In* the Computer

In this chapter, you will learn about: An Array Type for Strings. The Standard string Class. Vectors. Introduction Computer Science 1 CS 23021

Exercise 1.1 Hello world

Unit 14. Passing Arrays & C++ Strings

EE 109 Lab 8a Conversion Experience

For example, let s say we define an array of char of size six:

Agenda. Peer Instruction Question 1. Peer Instruction Answer 1. Peer Instruction Question 2 6/22/2011

Chapter 5. Section 5.4 The Common String Library Functions. CS 50 Hathairat Rattanasook

Principles of Programming Pointers, Dynamic Memory Allocation, Character Arrays, and Buffer Overruns

Characters, c-strings, and the string Class. CS 1: Problem Solving & Program Design Using C++

CS 61C: Great Ideas in Computer Architecture. C Arrays, Strings, More Pointers

Copyright 2003 Pearson Education, Inc. Slide 1

6. Pointers, Structs, and Arrays. March 14 & 15, 2011

int n = 10; int sum = 10; while (n > 1) { sum = sum + n; n--; } cout << "The sum of the integers 1 to 10 is " << sum << endl;

CS 61c: Great Ideas in Computer Architecture

Lab#5 Due Wednesday, February 25, at the start of class. Purpose: To develop familiarity with C++ pointer variables

Engineering Problem Solving with C++, Etter

BITG 1113: Array (Part 2) LECTURE 9

Week 5. Muhao Chen.

ELEC / COMP 177 Fall Some slides from Kurose and Ross, Computer Networking, 5 th Edition

Homework Assignment #2 (revised)

Name. CPTR246 Spring '17 (100 total points) Exam 2

CS61C Machine Structures. Lecture 4 C Pointers and Arrays. 1/25/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

CSCE Practice Midterm. Data Types

LAB #8. Last Survey, I promise!!! Please fill out this really quick survey about paired programming and information about your declared major and CS.

Object Oriented Programming COP3330 / CGS5409

6. Pointers, Structs, and Arrays. 1. Juli 2011

CSE 333 Midterm Exam 5/10/13

Lecture 12. We have already used strings. Strings. Hello Class is a string.

CS31 Discussion. Jie(Jay) Wang Week6 Nov.4

FORM 1 (Please put your name and section number (001/10am or 002/2pm) on the scantron!!!!) CS 161 Exam II: True (A)/False(B) (2 pts each):

C Style Strings. Lecture 11 COP 3014 Spring March 19, 2018

Strings in C++ Dr. Ferdin Joe John Joseph Kamnoetvidya Science Academy

Strings and Streams. Professor Hugh C. Lauer CS-2303, System Programming Concepts

C-String Library Functions

CS Introduction to Programming Midterm Exam #2 - Prof. Reed Fall 2015

CSCI 6610: Intermediate Programming / C Chapter 12 Strings

Security Coding Module - Buffer Overflow Data Gone Wild CS1

FORM 2 (Please put your name and form # on the scantron!!!!) CS 161 Exam II:

C++ For Science and Engineering Lecture 15

LAB #8. GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:

CSE 333 Midterm Exam Sample Solution 5/10/13

Pointer Basics. Lecture 13 COP 3014 Spring March 28, 2018

pointers + memory double x; string a; int x; main overhead int y; main overhead

G52CPP C++ Programming Lecture 3. Dr Jason Atkin

Lab # 02. Basic Elements of C++ _ Part1

CS 150 Lab 10 Functions and Random Numbers

CS107, Lecture 4 C Strings

Note 11/13/2014. They are like those i s, j s, and temp s that appear and disappear when the function starts and finishes...

CSCI 102 Fall 2010 Exam #1

OBJECT-ORIENTED PROGRAMMING CONCEPTS-CLASSES II

CS106L Handout #05 Fall 2007 October 3, C Strings

Today in CS161. Lecture #12 Arrays. Learning about arrays. Examples. Graphical. Being able to store more than one item using a variable

Multiple Choice (Questions 1 14) 28 Points Select all correct answers (multiple correct answers are possible)

Introduction to Algorithms and Data Structures. Lecture 6 - Stringing Along - Character and String Manipulation

CMSC 202 Midterm Exam 1 Fall 2015

C strings. (Reek, Ch. 9) 1 CS 3090: Safety Critical Programming in C

LECTURE 15. String I/O and cstring library

Unit 2: The string class

CS150 Intro to CS I. Fall Fall 2017 CS150 - Intro to CS I 1

UEE1302 (1102) F10 Introduction to Computers and Programming (I)

GE U111 Engineering Problem Solving & Computation Lecture 6 February 2, 2004

To become familiar with array manipulation, searching, and sorting.


The Stack, Free Store, and Global Namespace

Strings. Steven R. Bagley

Assignment #1 (50 points; due 11:59 P.M.)

Reading Assignment. Strings. K.N. King Chapter 13. K.N. King Sections 23.4, Supplementary reading. Harbison & Steele Chapter 12, 13, 14

C++ For Science and Engineering Lecture 12

Consider the above code. This code compiles and runs, but has an error. Can you tell what the error is?

Before we start - Announcements: There will be a LAB TONIGHT from 5:30 6:30 in CAMP 172. In compensation, no class on Friday, Jan. 31.

CS 31 Discussion: Week 6. Taylor Caulfield

CS242 COMPUTER PROGRAMMING

Pointers in C/C++ 1 Memory Addresses 2

CS 115 Exam 3, Spring 2010

CS31 Discussion 1E. Jie(Jay) Wang Week3 Oct.12

CSCI 123 INTRODUCTION TO PROGRAMMING CONCEPTS IN C++

CS 103 Unit 11. Linked Lists. Mark Redekopp

Chapter 8 Arrays and Strings. Objectives. Objectives (cont d.) Introduction. Arrays 12/23/2016. In this chapter, you will:

C++ Arrays. Arrays: The Basics. Areas for Discussion. Arrays: The Basics Strings and Arrays of Characters Array Parameters

C++ for Java Programmers

CSC 126 FINAL EXAMINATION FINAL Spring 2012 B. Name (last, First) Instructor. Total Possible. Received

CSE 374 Programming Concepts & Tools. Hal Perkins Fall 2015 Lecture 19 Introduction to C++

Chapter 7: User-Defined Simple Data Types, Namespaces, and the string Type

String Class in C++ When the above code is compiled and executed, it produces result something as follows: cin and strings

CS2141 Software Development using C/C++ C++ Basics

SYSC 2006 C Winter String Processing in C. D.L. Bailey, Systems and Computer Engineering, Carleton University

File Input / Output Streams in C++ CS 16: Solving Problems with Computers I Lecture #9

Basic program The following is a basic program in C++; Basic C++ Source Code Compiler Object Code Linker (with libraries) Executable

GDB Tutorial. A Walkthrough with Examples. CMSC Spring Last modified March 22, GDB Tutorial

Multiple Choice (Questions 1 13) 26 Points Select all correct answers (multiple correct answers are possible)

EE 355 Lab 3 - Algorithms & Control Structures

Assignment operator string class c++ Assignment operator string class c++.zip

CS107 Spring 2019, Lecture 4 C Strings

Lab: Supplying Inputs to Programs

Transcription:

1 Introduction In this lab you will implement a "hangman" game where the user is shown blanks representing letter of a word and then tries to guess and fill in the letters with a limited number of guesses. 2 What you will learn After completing this lab you should be able: Manipulate C-Strings (char *'s) Pass C-Strings to functions Utilie the C-String library (#include <cstring>) to perform various string operations Use cin to read a C-String 3 Background Information and Notes Review your lectures regarding C-Strings and in particular the C-String library. This library provides several useful functions to copy, compare, and get the length of a string. char * strcpy ( char * destination, const char * source); char * strncpy ( char * destination, const char * source, sie_t num ); int strcmp ( const char * str1, const char * str2 ); sie_t strlen ( const char * str ); strcpy(): This function takes in two pointers: the first to a destination character array, the second to a source character array. It copies the source string into the destination. The problem with strcpy() is that it only stops copying when it hits the NULL character in the source string. If the destination array does not have enough memory allocated, strcpy() will gladly overwrite out-of-bounds memory, which can lead to crashes, security vulnerabilities, or hacks in software that would let some rogue user take over the system. Search for 'buffer overrun vulnerability' to learn more. strncpy(): This is a safer alternative to strcpy(). It provides a third argument which is a MAXIMUM number of characters that will be copied. It should usually be passed in as the LENGTH of the destination array to ensure we don't write off the end of the destination array. Google 'strncpy' and the top hit will be a great website: cplusplus.com. It has excellent documentation on all C++ library functions. Please read the description of strncpy(). What is the return value? Last Revised: 9/26/2014 1

strcmp(): strcmp() takes two pointers to character strings and compares them lexicographically. It returns the integer value 0 if they are equal, -1 if str1 is "lessthan" str2 and +1 if str1 is "greater than" str2. So comparing "abc" and "abc" would return 0. Comparing "ab" and "abc" would return -1 as would comparing "ab" with "ac". Comparing "ac" with "ab" would return +1 as would comparing "abc" with "ab". strlen(): returns the length of a given string. The return type sie_t is some kind of unsigned integer (on your VM it is an unsigned 64-bit integer) but you can assign the value returned into an 'int' variable without worrying too much (unless you have strings with over 4 billion characters ) 4 Procedure 4.1 [1 pt.] Finding C++ Documentation Show your TA/CP the documentation for strcmp() on cplusplus.com 4.2 [2 pts.] Copying strings Common Errors Type in the following program to a file (stringdemo.cpp). Recall that if we have the following declarations of character arrays and pointers, we cannot simply copy one string to the other via an assignment statement. Similarly pointing one char* at another string means we will just reference the original and not make a copy. 1: #include <iostream> 2: #include <cstring> 3: 4: using namespace std; 5: 6: int main() 7: { 8: char mystring[80] = "ComputerScience"; 9: char yourstring[80]; 10: char* astring; 11: 12: yourstring = mystring; 13: strncpy(astring, mystring, 80); 14: 15: astring = mystring; // make a copy? 16: strncpy(yourstring, mystring, 80); // make a copy? 17: cout << astring << endl; 18: cout << yourstring << endl; 19: 20: mystring[0] = '*'; // which one actually made a copy? 21: cout << astring << endl; 22: cout << yourstring << endl; 23: 24: return 0; 25: } 2 Last Revised: 9/26/2014

Try to compile your code: $ g++ -g -o stringdemo stringdemo.cpp You should get the following error stringdemo.cpp: In function 'int main()': stringdemo.cpp:12:16: error: invalid array assignment Recall that array names when used in C yield the starting address. So you are really saying take the starting address of mystring and make it the starting address of yourstring. But yourstring has to stay as the address of the memory corresponding to it. Thus you should think of array names as constant pointers that cannot be changed/assigned to. The moral of the story is you must use the strncpy() function to copy over the characters one at a time. An example of this is line 16 of the program. So now comment that line (i.e. change it to) //yourstring = mystring; Look at the next line of code and think what this will do. strncpy(astring, mystring, 80); It will attempt to copy the characters one at a time from mystring to the memory that astring points to. But what does astring point to? We haven't initialied it. So whatever garbage bits are in the astring pointer will be used as an address and it will attempt to copy the characters there and likely fail/crash. Uh-oh! Compile and run the program and see what happens: $ g++ -g -o stringdemo stringdemo.cpp (If you have Wall enabled, you ll actually get a warning about the error.) Running $./stringdemo should (likely) yield: Segmentation fault (core dumped) This is because you tried to copy something to a bogus address. (If it doesn t, change the declaration of astring to char* astring = 0; and try again.) The moral of the story is you can only copy data to pointers that actually POINT at memory you have allocated! Last Revised: 9/26/2014 3

Whenever you get a segmentation fault (which will be a lot in your CS career), you can use GDB to find the line of code causing it. Start 'gdb stringdemo' and at the prompt just type 'run' to run the program in the debugger. When it crashes in gdb, type backtrace This will show you the function calls (and line numbers). You should see that the last function that you recognie (i.e. you wrote) is main() at stringdemo.cpp:13. This means main() called some other function at line 13 and that other function triggered the error. So this can always be used to tell you where your segmentation fault is. So now comment line 13 as well: // strncpy(astring, mystring, 80); Well we can initialie astring to point at mystring as on line 15. But are we making a copy? No, just referencing it (i.e. pointing at the original mystring array). On line 17 we print out astring which is really just printing out the data from mystring (since astring just points to mystring). But in line 20 we change mystring. So when we print out astring again on line 21 we will see the update. The moral of the story is pointing one pointer to someone else's data DOES NOT make a copy of the data. It only references that data. A change in the original is seen by the referencing pointer. On line 16 we actually make a copy of all the data from mystring to yourstring. Since we actually allocated an array of characters for yourstring, we have room to put the copied data. Now on line 20 when we change mystring, yourstring is unaffected and when we print it on line 22 we have the original. Show your TA you know how to find the source of a 'segmentation fault' by uncommenting the line of code that will cause the seg fault to occur and then running gdb in front of your TA to display the line number that caused the fault. 4.3 [7 pts.] Hangman Download the skeleton code. $ wget http://ee.usc.edu/~redekopp/cs103/hangman.cpp We have already created an array called wordbank which has 10 words defined in it. Your program should do the following: 4 Last Revised: 9/26/2014

1. Select a word at random from the wordbank 2. On each turn display the word, with letters not yet guessed showing as *'s, and letters that have been guessed showing in their correct location 3. The user should have 10 attempts ( lives ). Each unsuccessful guess costs one attempt. Successful guesses do NOT count as a turn. 4. You must use the C-String library (#include <cstring>) functions strlen() and strcmp() in your program [strcmp() can compare when the guessed word matches the target/selected word from the wordbank meaning the user won/finished] 5. You must complete and use the function int processguess(char* word, const char* targetword, char guess) This function should take the pointer to the current value of the word guessed thus far, the pointer to the target/selected word from the wordbank, and the character that the user guessed. It should change any *'s to actual good characters for the letter the user guessed and return a count of how many times the guessed letter appears in that word. In this way, if you return 0, it means the user guessed a letter that did NOT appear and thus should lose a turn back in your main(). 6. At every turn display the current version of the guessed word and how many turns remain 7. At the end of the game give a descriptive message whether the user won or lost Demonstrate your program and show your TA/CP the two functions you wrote explaining how it works. Sample runs of our solution to this program are shown below. A winning example: * 10 remain...enter a letter to guess: o * 9 remain...enter a letter to guess: l * c Current word: *c***c* s Current word: sc***c* g Last Revised: 9/26/2014 5

Current word: sc***c* i Current word: sci**c* e Current word: scie*ce n The word was: science. You win! A losing example: 10 remain...enter a letter to guess: 9 remain...enter a letter to guess: 6 remain...enter a letter to guess: 5 remain...enter a letter to guess: 4 remain...enter a letter to guess: 3 remain...enter a letter to guess: 2 remain...enter a letter to guess: 1 remain...enter a letter to guess: Too many turns...you lose! 6 Last Revised: 9/26/2014