K&R C Programs Exercise 5-9

Exercise 5-9. Rewrite the routines day_of_year and month_day with pointers instead of indexing. Replace every daytab[leap][i] with pointer arithmetic. The key step: instead of indexing into the 2D array, take a pointer to the correct row (const char *p = daytab[ly]) and use p[i] or *(p + i) to access elements. The loop variable can …

K&R C Programs Exercise 5-8

Exercise 5-8. There is no error checking in day_of_year or month_day. Remedy this defect. K&R’s Section 5.8 defines a 2D array daytab[2][13] for days per month and two functions that convert between day-of-year and (month, day). Neither validates its inputs. Bad values (year 0, month 13, day 367) cause silent wrong results or array overruns. …

K&R C Programs Exercise 5-7

Exercise 5-7. Rewrite readlines to store lines in an array supplied by main, rather than calling alloc to maintain storage itself. How much faster is the program? The K&R readlines from Section 5.6 calls a custom alloc to carve space out of a static buffer. This exercise moves storage to a flat char linestore[] array …

K&R C Programs Exercise 5-6

Exercise 5-6. Rewrite appropriate programs from earlier chapters and exercises with pointers instead of array indexing. Good possibilities include getline (Chapters 1 and 4), atoi, itoa, and their variants (Chapters 2, 3, 4), reverse (Chapter 3), strindex and getop (Chapter 4). This exercise is about translation: every array subscript a[i] can be written as *(a+i), …

K&R C Programs Exercise 5-5

Exercise 5-5. Write versions of the library functions strncpy, strncat, and strncmp, which operate on at most the first n characters of their argument strings. For example, strncpy(s,t,n) copies at most n characters of t to s. See the description in Appendix B. Three functions, each with a character count limit n. The non-obvious behaviour …

K&R C Programs Exercise 5-4

Exercise 5-4. Write the function strend(s,t), which returns 1 if the string t occurs at the end of the string s, and zero otherwise. Advance both pointers to their respective null terminators, then walk backwards together comparing characters. If t runs out first (pointer reaches the start of t), every character matched — t is …