Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Events
Videos
Audiobooks
Packt Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
Practical C Programming
Practical C Programming

Practical C Programming: Solutions for modern C developers to create efficient and well-structured programs

Arrow left icon
Profile Icon B. M. Harwani
Arrow right icon
$40.99
Full star icon Full star icon Half star icon Empty star icon Empty star icon 2.5 (2 Ratings)
Paperback Feb 2020 616 pages 1st Edition
eBook
$25.19 $27.99
Paperback
$40.99
Arrow left icon
Profile Icon B. M. Harwani
Arrow right icon
$40.99
Full star icon Full star icon Half star icon Empty star icon Empty star icon 2.5 (2 Ratings)
Paperback Feb 2020 616 pages 1st Edition
eBook
$25.19 $27.99
Paperback
$40.99
eBook
$25.19 $27.99
Paperback
$40.99

What do you get with Print?

Product feature icon Instant access to your digital copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Redeem a companion digital copy on all Print orders
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Product feature icon AI Assistant (beta) to help accelerate your learning
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Table of content icon View table of contents Preview book icon Preview Book

Practical C Programming

Managing Strings

Strings are nothing but arrays that store characters. Since strings are character arrays, they utilize less memory and lead to efficient object code, making programs run faster. Just like numerical arrays, strings are zero-based, that is, the first character is stored at index location 0. In C, strings are terminated by a null character, \0.

The recipes in this chapter will enhance your understanding of strings and will acquaint you with string manipulation. Strings play a major role in almost all applications. You will learn how to search strings (which is a very common task), replace a string with another string, search for a string that contains a specific pattern, and more. 

In this chapter, you will learn how to create the following recipes using strings: 

  • Determining whether the string is a palindrome 
  • Finding the occurrence of the first repetitive character in a string
  • Displaying the count of each character in a string
  • Counting the vowels and consonants in a string
  • Converting the vowels in a sentence to uppercase

Determining whether the string is a palindrome 

A palindrome is a string that reads the same regardless of whether it is in a forward or backwards order. For example, the word radar is a palindrome because it reads the same way forwards and backwards.

How to do it…

  1. Define two 80-character strings called str and rev(assuming your string will not exceed 79 characters). Your string can be of any length, but remember that the last position in the string is fixed for the null character \0:
char str[80],rev[80];
  1. Enter characters that will be assigned to the str string:
printf("Enter a string: ");
scanf("%s",str);
  1. Compute the length of the string using the strlen function and assign this to the n variable:
n=strlen(str);
  1. Execute a for loop in reverse order to access the characters in the str string in reverse order, and then assign them to the rev string:
for(i=n-1;i >=0;  i--)
{
rev[x]=str[i];
x++;
}
rev[x]='\0';
  1. Compare the two strings, str and rev, using strcmp
if(strcmp(str,rev)==0)
  1. If str and rev are the same, then the string is a palindrome.
In C, the functionality of specific built-in functions is specified in the respective libraries, also known as header files. So, while writing C programs, whenever built-in functions are used, we need to use their respective header files in the program at the top. The header files usually have the extension .h. In the following program, I am using a built-in function called strlen, which finds out the length of a string. Therefore, I need to use its library, string.h, in the program.

The palindrome.c program for finding out whether the specified string is a palindrome is as follows:

#include<stdio.h>  
#include<string.h>
void main()
{
char str[80],rev[80];
int n,i,x;
printf("Enter a string: ");
scanf("%s",str);
n=strlen(str);
x=0;
for(i=n-1;i >=0; i--)
{
rev[x]=str[i];
x++;
}
rev[x]='\0';
if(strcmp(str,rev)==0)
printf("The %s is palindrome",str);
else
printf("The %s is not palindrome",str);
}

Now, let's go behind the scenes to understand the code better.

How it works...

To ensure that a string is a palindrome, we first need to ensure that the original string and its reverse form are of the same length.

Let's suppose that the original string is sanjay and it is assigned to a string variable, str. The string is a character array, where each character is stored individually as an array element and the last element in the string array is a null character. The null character is represented as \0 and is always the last element in a string variable in C, as shown in the following diagram:

Figure 2.1

As you can see, the string uses zero-based indexing, that is, the first character is placed at index location str[0], followed by the second character at str[1], and so on. In regards to the last element, the null character is at str[6].

Using the strlen library function, we will compute the length of the entered string and assign it to the n variable. By executing the for loop in reverse order, each of the characters of the str string is accessed in reverse orderthat is, from n-1 to 0, and assigned to the rev string.

Finally, a null character, \0, is added to the rev string to make it a complete string. Therefore, rev will contain the characters of the str string, but in reverse order:

Figure 2.2

Next, we will run the strcmp function. If the function returns 0, it means that the content in the str and rev strings is exactly the same, which means that str is a palindrome. If the strcmp function returns a value other than 0, it means that the two strings are not the same; hence, str is not a palindrome. 

Let's use GCC to compile the palindrome.c program, as follows:

D:\CBook>gcc palindrome.c -o palindrome

Now, let's run the generated executable file, palindrome.exe, to see the output of the program:

D:\CBook>./palindrome
Enter a string: sanjay
The sanjay is not palindrome

Now, suppose that str is assigned another character string, sanas. To ensure that the word in str is a palindrome, we will again reverse the character order in the string.

So, once more, we will compute the length of str, execute a for loop in reverse order, and access and assign each character in str to rev. The null character \0 will be assigned to the last location in rev, as follows:

Figure 2.3

Finally, we will invoke the strcmp function again and supply both strings. 

After compiling, let's run the program again with the new string:

D:\CBook>palindrome
Enter a string: sanas
The sanas is palindrome

Voilà! We have successfully identified whether our character strings are palindromes. Now, let's move on to the next recipe!

Finding the occurrence of the first repetitive character in a string

In this recipe, you will learn how to create a program that displays the first character to be repeated in a string. For example, if you enter the string racecar, the program should give the output as The first repetitive character in the string racecar is c. The program should display No character is repeated in the string if a string with no repetitive characters is entered.

How to do it…

  1. Define two strings called str1 and str2. Your strings can be of any length, but the last position in the string is fixed for the null character \0:
char str1[80],str2[80];
  1. Enter characters to be assigned to str1. The characters will be assigned to the respective index locations of the string, beginning with str1[0]:
printf("Enter a string: ");
scanf("%s",str1);
  1. Compute the length of str1 using the strlen library function. Here, the first character of str1 is assigned to str2:
n=strlen(str1);
str2[0]=str1[0];
  1. Use a for loop to access all of the characters of str1 one by one and pass them to the ifexists function to check whether that character already exists in str2. If the character is found in str2, this means it is the first repetitive character of the string, and so it is displayed on the screen:
for(i=1;i < n; i++)
{
if(ifexists(str1[i], str2, x))
{
printf("The first repetitive character in %s is %c", str1,
str1[i]);
break;
}
}
  1. If the character of str1 does not exist in str2, then it is simply added to str2:
else
{
str2[x]=str1[i];
x++;
}

The repetitive.c program for finding the occurrence of the first repetitive character in a string is as follows::

#include<stdio.h>  
#include<string.h>
int ifexists(char u, char z[], int v)
{
int i;
for (i=0; i<v;i++)
if (z[i]==u) return (1);
return (0);
}

void main()
{
char str1[80],str2[80];
int n,i,x;
printf("Enter a string: ");
scanf("%s",str1);
n=strlen(str1);
str2[0]=str1[0];
x=1;
for(i=1;i < n; i++)
{
if(ifexists(str1[i], str2, x))
{
printf("The first repetitive character in %s is %c", str1,
str1[i]);
break;
}
else
{
str2[x]=str1[i];
x++;
}
}
if(i==n)
printf("There is no repetitive character in the string %s", str1);
}

Now, let's go behind the scenes to understand the code better.

How it works...

Let's assume that we have defined a string, str1, of some length, and have entered the following characters—racecar.

Each of the characters of the string racecar will be assigned to the respective index locations of str1, that is, r will be assigned to str1[0]a will be assigned to str1[1], and so on. Because every string in C is terminated by a null character, \0, the last index location of str1 will have the null character \0, as follows:

Figure 2.4

Using the library function strlen, the length of str1 is computed and a for loop is used to access all of the characters of str1, one by one, except for the first character. The first character is already assigned to str2, as shown in the following diagram:

Figure 2.5

Each character that is accessed from str1 is passed through the ifexists function. The ifexists function will check whether the supplied character already exists in str2 and will return a Boolean value accordingly. The function returns 1, that is, true, if the supplied character is found in str2. The function returns 0, that is, false, if the supplied character is not found in str2.

If ifexists returns 1, this means that the character is found in str2, and hence, the first repetitive character of the string is displayed on the screen. If the ifexists function returns 0, this means that the character does not exist in str2, so it is simply added to str2 instead.

Since the first character is already assigned, the second character of str1 is picked up and checked to see if it already exists in str2. Because the second character of str1 does not exist in str2, it is added to the latter string, as follows:

Figure 2.6

The procedure is repeated until all of the characters of str1 are accessed. If all the characters of str1 are accessed and none of them are found to exist in str2, this means that all of the characters in str1 are unique and none of them are repeated.

The following diagram shows strings str1 and str2 after accessing the first four characters of str1. You can see that the four characters are added to str2, since none of them already exist in str2:

Figure 2.7

The next character to be accessed from str1 is c. Before adding it to str2, it is compared with all the existing characters of str2 to determine if it already exists there. Because the c character already exists in str2, it is not added to str2 and is declared as the first repeating character in str1, as follows:

Figure 2.8

Let's use GCC to compile the repetitive.c program, as follows:

D:\CBook>gcc repetitive.c -o repetitive

Let's run the generated executable file, repetitive.exe, to see the output of the program:

D:\CBook>./repetitive
Enter a string: education
There is no repetitive character in the string education

Let's run the program again:

D:\CBook>repetitive
Enter a string: racecar
The first repetitive character in racecar is c

Voilà! We've successfully found the first repeating character in a string. 

Now, let's move on to the next recipe!

Displaying the count of each character in a string

In this recipe, you will learn how to create a program that displays the count of each character in a string in a tabular form. 

How to do it…

  1. Create a string called str. The last element in the string will be a null character, \0
  2. Define another string called chr of matching length, to store the characters of str:
char str[80],chr[80];

  1. Prompt the user to enter a string. The entered string will be assigned to the str string:
printf("Enter a string: ");
scanf("%s",str);
  1. Compute the length of the string array, str, using strlen:
n=strlen(str);
  1. Define an integer array called count to display the number of times the characters have occurred in str:
int count[80];
  1. Execute chr[0]=str[0] to assign the first character of str to chr at index location chr[0].
  2. The count of the character that's assigned in the chr[0] location is represented by assigning 1 at the count[0] index location:
chr[0]=str[0];
count[0]=1;
  1. Run a for loop to access each character in str:
for(i=1;i < n;  i++)
  1. Run the ifexists function to find out whether the character of str exists in the chr string or not. If the character does not exist in the chr string, it is added to the chr string at the next index location and the respective index location in the count array is set to 1:
if(!ifexists(str[i], chr, x, count))
{
x++;
chr[x]=str[i];
count[x]=1;
}
  1. If the character exists in the chr string, the value in the respective index location in the count array is incremented by 1 in the ifexists function. The p and q arrays in the following snippet represent the chr and count arrays, respectively, since the chr and count arrays are passed and assigned to the p and q parameters in the ifexists function:
if (p[i]==u)
{
q[i]++;
return (1);
}

The countofeach.c program for counting each character in a string is as follows::

#include<stdio.h>
#include<string.h>
int ifexists(char u, char p[], int v, int q[])
{
int i;
for (i=0; i<=v;i++)
{
if (p[i]==u)
{
q[i]++;
return (1);
}
}
if(i>v) return (0);
}
void main()
{
char str[80],chr[80];
int n,i,x,count[80];
printf("Enter a string: ");
scanf("%s",str);
n=strlen(str);
chr[0]=str[0];
count[0]=1;
x=0;
for(i=1;i < n; i++)
{
if(!ifexists(str[i], chr, x, count))
{
x++;
chr[x]=str[i];
count[x]=1;
}
}
printf("The count of each character in the string %s is \n", str);
for (i=0;i<=x;i++)
printf("%c\t%d\n",chr[i],count[i]);
}

Now, let's go behind the scenes to understand the code better.

How it works...

Let's assume that the two string variables you have defined, str and chr, are of the size 80 (you can always increase the size of the strings if you wish).

We will assign the character string racecar to the str string. Each of the characters will be assigned to the respective index locations of str, that is, r will be assigned to index location str[0]a will be assigned to str[1], and so on. As always, the last element in the string will be a null character, as shown in the following diagram:

Figure 2.9

Using the strlen function,  we will first compute the length of the string. Then, we will use the string array chr for storing characters of the str array individually at each index location. We will execute a for loop beginning from 1 until the end of the string to access each character of the string.

The integer array we defined earlier, that is, count, will represent the number of times the characters from str have occurred, which is represented by the index locations in the chr array. That is, if r is at index location chr[0], then count[0] will contain an integer value (1, in this case) to represent the number of times the r character has occurred in the str string so far:

Figure 2.10

One of the following actions will be applied to every character that's accessed from the string:

  • If the character exists in the chr array, the value in the respective index location in the count array is incremented by 1. For example, if the character of the string is found at the chr[2] index location, then the value in the count[2] index location is incremented by 1.
  • If the character does not exist in the chr array, it is added to the chr array at the next index location, and the respective index location is found when the count array is set to 1. For example, if the character a is not found in the chr array, it is added to the chr array at the next available index location. If the character a is added at the chr[1] location, then a value of 1 is assigned at the count[1] index location to indicate that the character shown in chr[1] has appeared once up until now.

When the for loop completes, that is when all of the characters in the string are accessed. The chr array will have individual characters of the string and the count array will have the count, or the number of times the characters represented by the chr array have occurred in the string. All of the elements in the chr and count arrays are displayed on the screen.

Let's use GCC to compile the countofeach.c program, as follows:

D:\CBook>gcc countofeach.c -o countofeach

Let's run the generated executable file, countofeach.exe, to see the output of the program:

D:\CBook>./countofeach
Enter a string: bintu
The count of each character in the string bintu is
b 1
i 1
n 1
t 1
u 1

Let's try another character string to test the results:

D:\CBook>./countofeach
Enter a string: racecar
The count of each character in the string racecar is
r 2
a 2
c 2
e 1

Voilà! We've successfully displayed the count of each character in a string.

Now, let's move on to the next recipe!

Counting vowels and consonants in a sentence

In this recipe, you will learn how to count the number of vowels and consonants in an entered sentence. The vowels are a, e, i, o, and u, and the rest of the letters are consonants. We will use ASCII values to identify the letters and their casing:

Figure 2.11

The blank spaces, numbers, special characters, and symbols will simply be ignored. 

How to do it…

  1. Create a string array called str to input your sentence. As usual, the last character will be a null character:
char str[255];
  1. Define two variables, ctrV and ctrC:
int  ctrV,ctrC;
  1. Prompt the user to enter a sentence of your choice:
printf("Enter a sentence: ");
  1. Execute the gets function to accept the sentence with blank spaces between the words:
gets(str);

  1. Initialize ctrV and ctrC to 0. The ctrV variable will count the number of vowels in the sentence, while the ctrC variable will count the number of consonants in the sentence:
ctrV=ctrC=0;
  1. Execute a while loop to access each letter of the sentence one, by one until the null character in the sentence is reached.
  2. Execute an if block to check whether the letters are uppercase or lowercase, using ASCII values. This also confirms that the accessed character is not a white space, special character or symbol, or number. 
  3. Once that's done, execute a nested if block to check whether the letter is a lowercase or uppercase vowel, and wait for the while loop to terminate:
while(str[i]!='\0')
{
if((str[i] >=65 && str[i]<=90) || (str[i] >=97 && str[i]<=122))
{
if(str[i]=='A' ||str[i]=='E' ||str[i]=='I' ||str[i]=='O'
||str[i]=='U' ||str[i]=='a' ||str[i]=='e' ||str[i]=='i'
||str[i]=='o'||str[i]=='u')
ctrV++;
else
ctrC++;
}
i++;
}

The countvowelsandcons.c program for counting vowels and consonants in a string is as follows:

#include <stdio.h>
void main()
{
char str[255];
int ctrV,ctrC,i;
printf("Enter a sentence: ");
gets(str);
ctrV=ctrC=i=0;
while(str[i]!='\0')
{
if((str[i] >=65 && str[i]<=90) || (str[i] >=97 && str[i]<=122))
{
if(str[i]=='A' ||str[i]=='E' ||str[i]=='I' ||str[i]=='O'
||str[i]=='U' ||str[i]=='a' ||str[i]=='e' ||str[i]=='i'
||str[i]=='o'||str[i]=='u')
ctrV++;
else
ctrC++;
}
i++;
}
printf("Number of vowels are : %d\nNumber of consonants are :
%d\n",ctrV,ctrC);
}

Now, let's go behind the scenes to understand the code better.

How it works...

We are assuming that you will not enter a sentence longer than 255 characters, so we have defined our string variable accordingly. When prompted, enter a sentence that will be assigned to the str variable. Because a sentence may have blank spaces between the words, we will execute the gets function to accept the sentence. 

The two variables that we've defined, that is, ctrV and ctrC, are initialized to 0. Because the last character in a string is always a null character, \0, a while loop is executed, which will access each character of the sentence one by one until the null character in the sentence is reached.

Every accessed letter from the sentence is checked to confirm that it is either an uppercase or lowercase character. That is, their ASCII values are compared, and if the ASCII value of the accessed character is a lowercase or uppercase character, only then it will execute the nested if block. Otherwise, the next character from the sentence will be accessed.

Once you have ensured that the accessed character is not a blank space, any special character or symbol, or a numerical value, then an if block will be executed, which checks whether the accessed character is a lowercase or uppercase vowel. If the accessed character is a vowel, then the value of the ctrV variable is incremented by 1. If the accessed character is not a vowel, then it is confirmed that it is a consonant, and so the value of the ctrC variable is incremented by 1.

Once all of the characters of the sentence have been accessed, that is, when the null character of the sentence is reached, the while loop terminates and the number of vowels and consonants stored in the ctrV and ctrC variables is displayed on the screen.

Let's use GCC to compile the countvowelsandcons.c program, as follows:

D:\CBook>gcc countvowelsandcons.c -o countvowelsandcons

Let's run the generated executable file, countvowelsandcons.exe, to see the output of the program:

D:\CBook>./countvowelsandcons
Enter a sentence: Today it might rain. Its a hot weather. I do like rain
Number of vowels are : 18
Number of consonants are : 23

Voilà! We've successfully counted all of the vowels and consonants in our sentence.

Now, let's move on to the next recipe!

Converting the vowels in a sentence to uppercase

In this recipe, you will learn how to convert all of the lowercase vowels in a sentence to uppercase. The remaining characters in the sentence, including consonants, numbers, special symbols, and special characters, are simply ignored and will be left as they are.

Converting the casing of any letter is done by simply changing the ASCII value of that character, using the following formulas:

  • Subtract 32 from the ASCII value of a lowercase character to convert it to uppercase
  • Add 32 to the ASCII value of an uppercase character to convert it to lowercase

The following diagram shows the ASCII values of the uppercase and lowercase vowels:

Figure 2.12

The ASCII value of the uppercase letters is lower than that of lowercase letters, and the difference between the values is 32.

How to do it…

  1. Create a string called str to input your sentence. As usual, the last character will be a null character:
char str[255];
  1. Enter a sentence of your choice:
printf("Enter a sentence: ");
  1. Execute the gets function to accept the sentence with blank spaces between the words, and initialize the i variable to 0, since each character of the sentence will be accessed through i:
gets(str);
i=0
  1. Execute a while loop to access each letter of the sentence one by one, until the null character in the sentence is reached:
while(str[i]!='\0')
{
{ …
}
}
i++;
  1. Check each letter to verify whether it is a lowercase vowel. If the accessed character is a lowercase vowel, then the value 32 is subtracted from the ASCII value of that vowel to convert it to uppercase:
if(str[i]=='a' ||str[i]=='e' ||str[i]=='i' ||str[i]=='o' ||str[i]=='u')
str[i]=str[i]-32;
  1. When all of the letters of the sentence have been accessed, then simply display the entire sentence.

The convertvowels.c program for converting the lowercase vowels in a sentence to uppercase is as follows:

#include <stdio.h>
void main()
{
char str[255];
int i;
printf("Enter a sentence: ");
gets(str);
i=0;
while(str[i]!='\0')
{
if(str[i]=='a' ||str[i]=='e' ||str[i]=='i' ||str[i]=='o'
||str[i]=='u')
str [i] = str [i] -32;
i++;
}
printf("The sentence after converting vowels into uppercase
is:\n");
puts(str);
}

Now, let's go behind the scenes to understand the code better.

How it works...

Again, we will assume that you will not enter a sentence longer than 255 characters. Therefore, we have defined our string array, str , to be of the size 255. When prompted, enter a sentence to assign to the str array. Because a sentence may have blank spaces between the words, instead of scanf, we will use the gets function to accept the sentence.

To access each character of the sentence, we will execute a while loop that will run until the null character is reached in the sentence. After each character of the sentence, it is checked whether it is a lowercase vowel. If it is not a lowercase vowel, the character is ignored and the next character in the sentence is picked up for comparison.

If the character that's accessed is a lowercase vowel, then a value of 32 is subtracted from the ASCII value of the character to convert it to uppercase. Remember that the difference in the ASCII values of lowercase and uppercase letters is 32. That is, the ASCII value of lowercase a is 97 and that of uppercase A is 65. So, if you subtract 32 from 97, which is the ASCII value of lowercase a, the new ASCII value will become 65, which is the ASCII value of uppercase A.

The procedure of converting a lowercase vowel to an uppercase vowel is to first find the vowel in a sentence by using an if statement, and then subtract the value 32 from its ASCII value to convert it to uppercase.

Once all of the characters of the string are accessed and all of the lowercase vowels of the sentence are converted to uppercase, the entire sentence is displayed using the puts function.

Let's use GCC to compile the convertvowels.c program, as follows:

D:\CBook>gcc convertvowels.c -o convertvowels

Let's run the generated executable file, convertvowels.exe, to see the output of the program:

D:\CBook>./convertvowels
Enter a sentence: It is very hot today. Appears as if it might rain. I like rain
The sentence after converting vowels into uppercase is:
It Is vEry hOt tOdAy. AppEArs As If It mIght rAIn. I lIkE rAIn

Voilà! We've successfully converted the lowercase vowels in a sentence to uppercase.

Left arrow icon Right arrow icon
Download code icon Download Code

Key benefits

  • Tackle various challenges in C programming by making the most of its latest features
  • Understand the workings of arrays, strings, functions, pointers, advanced data structures, and algorithms
  • Become well-versed with process synchronization during multitasking and server-client process communication

Description

Used in everything from microcontrollers to operating systems, C is a popular programming language among developers because of its flexibility and versatility. This book helps you get hands-on with various tasks, covering the fundamental as well as complex C programming concepts that are essential for making real-life applications. You’ll start with recipes for arrays, strings, user-defined functions, and pre-processing directives. Once you’re familiar with the basic features, you’ll gradually move on to learning pointers, file handling, concurrency, networking, and inter-process communication (IPC). The book then illustrates how to carry out searching and arrange data using different sorting techniques, before demonstrating the implementation of data structures such as stacks and queues. Later, you’ll learn interesting programming features such as using graphics for drawing and animation, and the application of general-purpose utilities. Finally, the book will take you through advanced concepts such as low-level programming, embedded software, IoT, and security in coding, as well as techniques for improving code performance. By the end of this book, you'll have a clear understanding of C programming, and have the skills you need to develop robust apps.

Who is this book for?

This intermediate-level book is for developers who want to become better C programmers by learning its modern features and programming practices. Familiarity with C programming is assumed to get the most out of this book.

What you will learn

  • Discover how to use arrays, functions, and strings to make large applications
  • Perform preprocessing and conditional compilation for efficient programming
  • Understand how to use pointers and memory optimally
  • Use general-purpose utilities and improve code performance
  • Implement multitasking using threads and process synchronization
  • Use low-level programming and the inline assembly language
  • Understand how to use graphics for animation
  • Get to grips with applying security while developing C programs
Estimated delivery fee Deliver to Colombia

Standard delivery 10 - 13 business days

$19.95

Premium delivery 3 - 6 business days

$40.95
(Includes tracking information)

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Feb 14, 2020
Length: 616 pages
Edition : 1st
Language : English
ISBN-13 : 9781838641108
Category :
Languages :

What do you get with Print?

Product feature icon Instant access to your digital copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Redeem a companion digital copy on all Print orders
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Product feature icon AI Assistant (beta) to help accelerate your learning
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Estimated delivery fee Deliver to Colombia

Standard delivery 10 - 13 business days

$19.95

Premium delivery 3 - 6 business days

$40.95
(Includes tracking information)

Product Details

Publication date : Feb 14, 2020
Length: 616 pages
Edition : 1st
Language : English
ISBN-13 : 9781838641108
Category :
Languages :

Packt Subscriptions

See our plans and pricing
Modal Close icon
$19.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
$199.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts
$279.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total $ 147.97
Learn C Programming
$48.99
Practical C Programming
$40.99
Extreme C
$57.99
Total $ 147.97 Stars icon

Table of Contents

19 Chapters
Working with Arrays Chevron down icon Chevron up icon
Managing Strings Chevron down icon Chevron up icon
Exploring Functions Chevron down icon Chevron up icon
Preprocessing and Compilation Chevron down icon Chevron up icon
Deep Dive into Pointers Chevron down icon Chevron up icon
File Handling Chevron down icon Chevron up icon
Implementing Concurrency Chevron down icon Chevron up icon
Networking and Inter-Process Communication Chevron down icon Chevron up icon
Sorting and Searching Chevron down icon Chevron up icon
Working with Graphs Chevron down icon Chevron up icon
Advanced Data Structures and Algorithms Chevron down icon Chevron up icon
Creativity with Graphics Chevron down icon Chevron up icon
Using MySQL Database Chevron down icon Chevron up icon
General-Purpose Utilities Chevron down icon Chevron up icon
Improving the Performance of Your Code Chevron down icon Chevron up icon
Low-Level Programming Chevron down icon Chevron up icon
Embedded Software and IoT Chevron down icon Chevron up icon
Applying Security in Coding Chevron down icon Chevron up icon
Other Books You May Enjoy Chevron down icon Chevron up icon

Customer reviews

Rating distribution
Full star icon Full star icon Half star icon Empty star icon Empty star icon 2.5
(2 Ratings)
5 star 0%
4 star 50%
3 star 0%
2 star 0%
1 star 50%
Maxwell O. Massa Jul 07, 2023
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
In reviewing books like this, it's important to hash out the reader's background first so others will be able to judge from what perspective he viewed the work. I am a beginner-level C developer, working on my own outside of any formal instruction, and this was the second book I've worked through (the first one was "Learn C Programming" by Jeff Szuhay (ISBN: 978-1801078450), also published by Packt). Given that profile, I found "Practical C Programming" by B. M. Harwarni to be an amazing "post-introduction" text that really thrust me into world of *possibilities* that C offers, while also offering some decent review of earlier content from Szuhay's lessons.To characterize the general feeling of this work, it provides a high-speed, almost violent acquaintance with a huge array of C's features and possibilities. It is critical to understand that this book lacks depth: most of the material in here is presented relatively briefly over the course of a chapter and then put down again, never to be reconsidered. Now, for someone like me who's working on his own and is trying to find a way to orient towards a project that might be bridge I need towards real competence, this was WONDERFUL: Jeff Szuhay's book did a good job of providing a structured, comprehensive introduction to the rudiments of the language, but - at the end of it all - I wasn't left with enough to begin imagining possibilities. Harwani fills that need by dragging me through such disparate topics as OpenGL integration, graph theory, MySQL structures and operations, Internet of Things (IoT) projects, and x86 assembly... among others. The first six chapters of the book (and parts of Chapters 11 and 14) also serve as a review of much of the ground covered in "Learn C Programming", which I actually found positive, but it would have been nice if this was done formally and deliberately.None of the new content is handled more than suggestively and superficially, but - as a result - the reader ends the book with the feeling that he has been dumped at a bewildering crossroads of possibilities, yet with an understanding of where each road would lead *if* he were to pursue it. I personally think that people teaching themselves would benefit particularly from this title: after reading Harwani's book, I realized that learning how C and MariaDB interact would be a critical next step for me, so I now know where I'm headed next. This is very valuable for people working on their own."Practical C Programming" has, of course, its flaws: they are tolerable, but should be mentioned. First of all, as a Packt title, is required by law to contain a large number of bizarre typos; while these are nowhere near as heinous as those that afflicted Szuhay's text, they're still really bad, particularly on pp. 291 and 410, where the prose description of the example code don't actually match the code itself, as presented. Secondly, and more importantly, the book is very Windows-oriented: people working in Linux, like myself, will be forced find workarounds for some of the units, particularly Chapter 6 (Linux does not distinguish between sequential and random files) and Chapter 17 (the Keil IDE used in this chapter is a Windows-only application). Finally, in spite of the fact that author urges the student to never use gets() in his or her code on page 562 because "it always creates a vulnerability", the book is otherwise full of gets() calls. Most modern compilers utterly refuse to process code that contains this function, so a certain amount of spot revision on-the-fly is needed on the part of the reader, which can get a little laborious. None of these issues are terrible in their own right, but they are irritations that could be effectively addressed in a second edition.In summary: it's a good book for what it is, assuming you're the sort of person who needs what it offers. I, personally, found myself very grateful for Mr. Harwani's work by the time I reached the end, but I would not endorse it without qualification. Think about what's good and bad here, and then make a carefully weighted decision with your eyes open. C is very important, but it is not easy. Personally, I am happy to take something imperfect, if it can help me make it to the next stage.
Amazon Verified review Amazon
Amazon Customer Dec 01, 2020
Full star icon Empty star icon Empty star icon Empty star icon Empty star icon 1
there is nothing practical like thing in this book. price is too high compare to content in book. normal c linux program with lengthy story.
Amazon Verified review Amazon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

What is the digital copy I get with my Print order? Chevron down icon Chevron up icon

When you buy any Print edition of our Books, you can redeem (for free) the eBook edition of the Print Book you’ve purchased. This gives you instant access to your book when you make an order via PDF, EPUB or our online Reader experience.

What is the delivery time and cost of print book? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
What is custom duty/charge? Chevron down icon Chevron up icon

Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.

Do I have to pay customs charges for the print book order? Chevron down icon Chevron up icon

The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.

List of EU27 countries: www.gov.uk/eu-eea:

A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.

How do I know my custom duty charges? Chevron down icon Chevron up icon

The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.

For example:

  • If you live in Mexico, and the declared value of your ordered items is over $ 50, for you to receive a package, you will have to pay additional import tax of 19% which will be $ 9.50 to the courier service.
  • Whereas if you live in Turkey, and the declared value of your ordered items is over € 22, for you to receive a package, you will have to pay additional import tax of 18% which will be € 3.96 to the courier service.
How can I cancel my order? Chevron down icon Chevron up icon

Cancellation Policy for Published Printed Books:

You can cancel any order within 1 hour of placing the order. Simply contact customercare@packt.com with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at customercare@packt.com using the returns and refund process.

Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.

What is your returns and refunds policy? Chevron down icon Chevron up icon

Return Policy:

We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on customercare@packt.com with the order number and issue details as explained below:

  1. If you ordered (eBook, Video or Print Book) incorrectly or accidentally, please contact Customer Relations Team on customercare@packt.com within one hour of placing the order and we will replace/refund you the item cost.
  2. Sadly, if your eBook or Video file is faulty or a fault occurs during the eBook or Video being made available to you, i.e. during download then you should contact Customer Relations Team within 14 days of purchase on customercare@packt.com who will be able to resolve this issue for you.
  3. You will have a choice of replacement or refund of the problem items.(damaged, defective or incorrect)
  4. Once Customer Care Team confirms that you will be refunded, you should receive the refund within 10 to 12 working days.
  5. If you are only requesting a refund of one book from a multiple order, then we will refund you the appropriate single item.
  6. Where the items were shipped under a free shipping offer, there will be no shipping costs to refund.

On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on customercare@packt.com within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.

What tax is charged? Chevron down icon Chevron up icon

Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.

What payment methods can I use? Chevron down icon Chevron up icon

You can pay with the following card types:

  1. Visa Debit
  2. Visa Credit
  3. MasterCard
  4. PayPal
What is the delivery time and cost of print books? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
Modal Close icon
Modal Close icon