0% found this document useful (0 votes)
53 views

C Pass Addresses and Pointers

The document discusses file handling in C programming. It covers: 1. Passing addresses and pointers as arguments to functions in C using examples of swapping values and adding to a pointer value. 2. The basics of file handling in C including what a file is, the need for files, types of files (text and binary), and common file operations like opening, reading, writing and closing files. 3. Key functions for file handling in C like fopen(), fprintf(), fclose(), fscanf(), feof(), and fgetc() along with their uses and syntax.

Uploaded by

aish
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views

C Pass Addresses and Pointers

The document discusses file handling in C programming. It covers: 1. Passing addresses and pointers as arguments to functions in C using examples of swapping values and adding to a pointer value. 2. The basics of file handling in C including what a file is, the need for files, types of files (text and binary), and common file operations like opening, reading, writing and closing files. 3. Key functions for file handling in C like fopen(), fprintf(), fclose(), fscanf(), feof(), and fgetc() along with their uses and syntax.

Uploaded by

aish
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 29

C Pass Addresses and Pointers

In this tutorial, you'll learn to pass addresses and pointers as arguments to functions with the

help of examples.

In C programming, it is also possible to pass addresses as arguments to functions.

To accept these addresses in the function definition, we can use pointers. It's because pointers

are used to store addresses. Let's take an example:

Example: Pass Addresses to Functions

#include <stdio.h>

void swap(int *n1, int *n2);

int main()

int num1 = 5, num2 = 10;

// address of num1 and num2 is passed

swap( &num1, &num2);

printf("num1 = %d\n", num1);

printf("num2 = %d", num2);

return 0;
}

void swap(int* n1, int* n2)

int temp;

temp = *n1;

*n1 = *n2;

*n2 = temp;

Run Code

Example 2: Passing Pointers to Functions

#include <stdio.h>

void addOne(int* ptr) {

(*ptr)++; // adding 1 to *ptr

int main()

int* p, i = 10;

p = &i;

addOne(p);

printf("%d", *p); // 11

return 0;
}

File Handling in C Language with Examples

In this article, I am going to discuss File Handling in C Language with examples. Please

read our previous article where we discussed Dynamic Memory Management in C.

What is a File?

A file is the name of a physical memory location in the secondary storage area. The file

contains a sequence of bytes of data in the secondary storage area in the form of an

unstructured manner. In the implementation, when we were required to interact with the

secondary storage area, then recommended going for file operations. By using files, primary

memory-related data can be sent to the secondary storage area and secondary storage area

information can be loaded to primary memory. In ‘C’ programming language, IO Operations

are classified into two types:

1. Standard IO Operations

2. Secondary IO Operations

When we are interacting with Secondary IO devices, then it is called Secondary IO

Operations. Standard IO related and Secondary IO related, all predefined functions are

declared in stdio.h only.

Why files are needed?

The entire data is lost, when a program is terminated. Storing the data in a file will preserve

your data once the program is terminated. It will take a lot of time to enter a large number of

data. However, if you’ve got a file containing all the information, you’ll easily access the

contents of the file using a few commands in C. Without any prior changes, you can easily

move your data from one computer to another.

Types of Files

When handling files, there are two sorts of files you ought to know about:
1. Text files

2. Binary files

Text files

Text files are the normal .txt files. You can easily create text files using any simple text editor

like Notepad. When you open those files, you will see all the contents within the file as plain

text. You can easily edit or delete the contents. They take minimum effort to for easily

readable, supply the smallest amount of security, and take bigger space for storing. In the

Text files, data is represented with the help of ASCII values, i.e., .txt, .c, .cpp

Binary files

Binary files are mostly the .bin files on your computer. Instead of storing data in plain text,

they store it within the binary form (0’s and 1’s). They can hold a better amount of

knowledge, aren’t readable easily, and provides better security than text files. In binary Files,

data is represented with the help of byte, i.e., .exe, .mp3, .mp4, .jpeg

Points to Remember:

1. To specify that a given file is being opened or created in “text mode” then append “t”

to the string mode. Examples: rt, wt, at, rt+, wt+, at+

2. To specify the binary mode, append “b” to the end of the string mode. Example: RB.

Wb, ab, r+b, w+b, a+b

3. “fopen” and “fsopen” also allow that “t” or “b” to be inserted between the letter and

the ‘t’ character in the string. Example: rt+ is equivalent to r+t.

4. If “t” or “b” is not giving in the string, the mode is governed by “f” mode, if “f” mode

is set to O_BINARY, files are opened in BINARY mode.

5. If “f” mode is set to O_TEXT, they are opened in text mode. These constants are

defined in fcntl.h
File Operations

In C, you’ll perform four major operations on files, either text or binary:

1. Creating a new file

2. Opening an existing file

3. Closing a file

4. Reading from a file and writing information to a file

Example:

#include<stdio.h>

#include<dos.h>

#include<stdlib.h>

int main()

FILE* fp;

fp = fopen("F:\.txt","w");

if(fp == NULL)

printf("\n Unable to create File");

return EXIT_FAILURE;

fprintf(fp,"Welcome");

fprintf(fp,"\n%d HELLO WORLD %f", 100, 12.50);


fclose(fp);

return EXIT_SUCCESS;

Output:

Points to Remember:

1. When we are opening a file, two parameters must be passed: Path and Mode

2. The file may open or may not open. If open, then it returns ADDRESS. If not, then it

returns NULL.

3. stdio.h provides the standard IO Related predefined function prototype.

4. conio.h provides the Console Related predefined function prototype.

5. FILE is a predefined structure that is available in stdio.h. By using the FILE structure,

we can handle file properties. The size of the FILE structure is 16 bytes.

6. fp is a variable of type FILE*, which maintains the address of FILE. The size of fp is

2 bytes because it holds an address.

fopen()

It is a predefined function, which is declared in stdio.h, by using this function we can open a

file in a specific path with a specific mode. It requires two arguments of type const char*. On

success, fopen() returns FILE*, on failure returns NULL. Generally, fopen() is failed to open

FILE in the following cases:


1. The path is incorrect.

2. Mode is incorrect

3. Permissions are not available

4. Memory is not available

Syntax: FILe *fopen(const char* path, const char* mode);

fprintf()

By using this predefined function, we can write the content in the file. fprintf() can take any

number of arguments but the first argument must be FILE* and the remaining arguments are

of any path.

Syntax: int fprintf(FILE* stream, const char*path,…..);

fclose()

By using this predefined function, we can close the file after saving data. fclose() requires

one argument of type FILE* and returns an int value.

Syntax: int fclose(FILE* stream);

File Modes

Always FILE modes will indicate for what purpose the file needs to be opened or created.

File modes are classified into three types:

1. Write

2. Read

3. Append

Depending on operations, file modes are classified into 6 types:

1. Write(w): Create a file for writing, if the file already exists, then it will override (the

old file is deleted and a new file is created). In “w” mode, whether the file exists or

not, always a new file is constructed.


2. Read(r): Open an existing file for reading, if file not exists then fopen() returns

NULL. When we are working with “r” mode, if the file doesn’t exist, a new file is not

constructed.

3. Append(a): Open an existing file for appending (write the data at end of the file) or

create a new file for writing if it doesn’t exist. When we are working with “a”, if file

doesn’t exist, then only a new file is constructed.

4. w+ (write and read): Create a file for update i.e. write and read if the file already

exists then it will override. In w+ mode, if the file is available or not, always a new

file is constructed.

5. r+ (read and write): Open an existing file for update I.e. read and write. Generally,

“r+” mode is required, when we need to update existing information. In “r+” mode, if

the file doesn’t exist, a new file is not constructed.

6. a+ (w+ and r+): Open an existing file for update or create a new file for update. By

using a+ mode, we can perform random operations.

Program For Reading Data From Files using C Language

#include<stdio.h>

#include<stdlib.h>

int main()

FILE* fp;

char ch;

fp = fopen("F:\.txt","r");

if(fp == NULL)
{

printf("\n File not Found");

return EXIT_FAILURE;

while(1)

fscanf(fp,"%c",&ch);

if(feof(fp)) //if(ch == EOF)

break;

printf("%c",ch);

fclose(fp);

return EXIT_SUCCESS;

Output:
fscanf()

It is a predefined function that is declared in stdio.h, by using this function, we can read the

data from a file. fscanf() can take any number of arguments but the first argument must be

and the remaining arguments should be scanf() function format. When we are working with

fscanf() function, it can read the entire content of the file except.

Syntax: int fscanf(FILE* stream, const char” format,…..);

feof()

By using this function, we can find the end of the character position. It requires one argument

of type FILE* and returns an int value. When the file pointer is pointing to the EOF character

then it returns a non-zero value, if it is pointing to other than the EOF character then it returns

zero.

Syntax: int feof(FILE* stream);

fgetc()

It is a predefined unformatted function that is declared in stdio.h, by using this function we

can read the data from a file including EOF characters also. It returns an int value i.e. ASCII

value of a character.

Syntax: int getc(FILE* stream);

Program for Reading a line from a file and displaying it using C Language

#include <stdio.h>

#include <stdlib.h> // For exit() function

int main() {

char c[1000];

FILE *fptr;

if ((fptr = fopen("F:\.txt", "r")) == NULL) {


printf("Error! opening file");

// Program exits if file pointer returns NULL.

exit(1);

// reads text until newline is encountered

fscanf(fptr, "%[^\n]", c);

printf("Data from the file:\n%s", c);

fclose(fptr);

return 0;

Output

Example to understand File Handling in C Language:

#include<stdio.h>

#include<conio.h>

int main()

{
FILE* fp;

char path[50];

char str[50];

fprintf(stdout, "Enter a file path : ");

gets(path);

fp = fopen(path,”a");

if(fp == NULL)

fprintf(stderr, "Unable o create file");

getch();

return 1;

printf("Enter a String : ");

fflush(stdin);

gets(str);

fputs(str, fp);

fclose(fp);

return 0;

}
Output

1.txt

Delay in File Handling

It is a predefined function that is declared in dos.h. By using this function, we can suspend

the program from execution. The delay() function requires one argument of type unsigned

integer i.e. milliseconds value. By using delay(), we can suspend the program for a minimum

of 1 sec and a maximum of 5 sec.

Syntax: void delay(unsigned milliseconds);

sleep()

It is a predefined function that is declared in dos.h. By using this function, we can suspend

the program execution sleep() function requires one argument of type unsigned integer

seconds format data.

Syntax: void sleep(unsigned seconds);

stdout: It is a global pointer variable that is defined in stdio.h. By using this global pointer,

we can handle the standard output buffer.


stdin: By using this global pointer, we can handle the standard input buffer.

stderr: By using this global pointer, we can handle standard IO Related errors. When we are

working with stderr, it will redirect the data back to stdout.

stdprn: By using this global pointer, we can handle the printer.

fseek()

By using this predefined function, we can create the movement in the file pointer. fseek()

requires three arguments of type FILE*, long integer, and an integer type.

Syntax: int fseek(FILE* stream, long offset, int whence);

Where stream will provide file information, Offset is the number of bytes, and whence value

is file pointer location. The whence value can be recognized by using the following constant

values:

1. SEEK_SET: This constant will pass the file pointer to the beginning of the file.

2. SEEK_CUR: This constant will provide the constant position of the file pointer.

3. SEEK_END: This constant value will send the file pointer to the end of the file.

These constant values can be recognized using INTEGER values also.

1. SEEK_SET value is 0.

2. SEEK_CUR value is 1.

3. SEEK_END value is 2.

rewind()

By using this predefined function, we can send the control to the beginning of the file.

rewind() requires one argument of type FILE*.

Syntax : void rewind(FILE* stream);

The behavior of rewind() is similar to – fseek(FILE*, O, SEEK_SET)


ftell()

By using this predefined function, we can find the size of the file. ftell() requires one

argument of type FILE* and returns a long integer value. Generally, ftell() returns file pointer

position, so if the file pointer is pointing to the end of the character then it is equal to the size

of the file.

Syntax: long ftell(FILE* stream);

remove()

By using this predefined function, we can delete two files permanently from the hard disk.

remove() requires one argument of type constant char* and returns an int value.

Syntax: int remove(const char* filename);

rename()

By using this predefined function, we can change the name of an existing file. rename()

function requires two types of arguments of type const char and returns an int value.

Syntax: int rename(const char* oldname, const char* newname);

Program to Reverse the string data present in a file using C Language

#include<stdio.h>

#include<string.h>

#include<malloc.h>

int main()

FILE *fp;

char path[50];

long int fsize, i = 0;


char *str;

char ch;

printf ("Enter a file path :");

gets (path);

fp = fopen (path, "rt");

if (fp == NULL)

printf ("\n File not found");

return 1;

fseek (fp, 0, SEEK_END);

fsize = ftell (fp);

fseek (fp, 0, SEEK_SET);

str = (char *) calloc (fsize, sizeof (char));

while (1)

ch = fgetc (fp);

if (feof (fp))

break;

str[i++] = ch;
}

str[i] = '\o';

fclose (fp);

remove (path);

strrev (str);

fp = fopen (path, "wt");

fputs (str, fp);

fclose (fp);

free (str);

str = NULL;

return 0;

Output
1.txt

Program to Find and Update (or Replace) a Character in a File using C Language

#include<stdio.h>

#include<stdlib.h>

int main()

FILE *fp;

char path[50];

char ch, sch, dch;

printf ("Enter a file path : ");

gets (path);

fp = fopen (path, "rt+");

if (fp == NULL)

printf ("File not found");

return 1;

}
printf ("\n Enter a source character(s) : ");

fflush (stdin);

sch = getchar ();

printf ("\n Enter a destination character(D) : ");

fflush (stdin);

dch = getchar ();

while (1)

ch = fgetc (fp);

if (ch == EOF)

break;

if (ch == sch)

fseek (fp, -1, SEEK_CUR);

fprintf (fp, "%c", dch);

fseek (fp, 0, SEEK_CUR);

fclose (fp);

return 0;
}

Output

2.txt

Program for Encoding and Decoding using C Language

#include<stdio.h>

#include<conio.h>

int main()

FILE *fp;

int flag, code = 0;

char path[30];
char ch;

printf ("Enter a file path : ");

gets (path);

fp = fopen (path, "r+");

if (fp == NULL)

printf ("\n File not found");

getch ();

return 1;

do

printf ("\n 1 for ENCODE : ");

printf ("\n 2 for DECODE : ");

scanf ("%d", &flag);

while (flag != 1 && flag != 2);

if (flag == 1)

code = 40;

else
code = -40;

while (1)

ch = fgetc (fp);

if (ch == EOF)

break;

if(ch != '\n' && ch != '\r')

fseek (fp, -1, SEEK_CUR);

fprintf (fp, "%c", ch + code);

fseek (fp, 0, SEEK_CUR);

fclose (fp);

return 0;

}
Output

2.txt (after Encoding)

2.txt (after Decoding)

Program for Operations on Audio File using C Language

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define f1 "F:\\part1.mp3"

#define f2 "F:\\part2.mp3"
#define f3 "F:\\part3.mp3"

#define f4 "F:\\part4.mp3"

int main(void)

FILE *sfp;

FILE *dfp;

char spath[30];

char dpath[4][30] = { f1, f2, f3, f4 };

long int fsize = 0, nb = 0; // nb is number of bytes

int i = 0;

char ch;

printf ("\n Enter sfp path : ");

gets (spath);

if (sfp == NULL)

printf ("\n %s NOT FOUND", spath);

return EXIT_FAILURE;

fseek (sfp, 0, SEEK_END);

fsize = ftell (sfp);


rewind (sfp);

dfp = fopen (dpath[i], "wb");

if (dfp == NULL)

fclose (sfp);

printf ("\n%s Unable to create");

return EXIT_FAILURE;

while (1)

ch = fgetc (sfp);

if (feof (sfp))

break;

fprintf (dfp, "%c", ch);

++nb;

if (nb = fsize / 4 && i != 3)

fclose (dfp);

nb = 0;

++i;
dfp = fopen (dpath[i], "wb");

if (dfp == NULL)

printf ("\n %s Unable to create", dpath[i]);

fclose (sfp);

return EXIT_FAILURE;

fclose (sfp);

fclose (dfp);

return EXIT_SUCCESS;

Output
Program to combine two or more audio files together using C Language

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define f1 "F:\\part1.mp3"

#define f2 "F:\\part2.mp3"

#define f3 "F:\\part3.mp3"

#define f4 "F:\\part4.mp3"

int main(void)

FILE *sfp;

FILE *dfp;

char dpath[30];

char spath[4][30] = { f1, f2, f3, f4 };

int i = 0;

char ch;

printf ("\n enter dfp path : ");

gets (dpath);

dfp = fopen (dpath, "wb");

if (dfp == NULL)
{

printf ("\n%sUnable to create", dpath);

return EXIT_SUCCESS;

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

sfp = fopen (spath[i], "rb");

if (sfp == NULL)

fclose (dfp);

printf ("\n%s Not Found", spath[i]);

return EXIT_FAILURE;

while (1)

ch = fgetc (sfp);

if (feof (sfp))

break;

fprintf (dfp, "%c", ch);

}
fclose (sfp);

fclose (dfp);

return EXIT_SUCCESS;

You might also like