Karthik
Karthik

Reputation: 21

Segmentation fault (core dumped) error for C program

I am trying to run below program in an online C compiler. But I get segmentation error. Can you help me fix this

#include <stdio.h>
#include <string.h>

int main()
{
    char string[15] = "Strlwr in C";
    printf("%s",tolower(string));
    return  0;
}

Upvotes: 0

Views: 541

Answers (3)

Mohit Jain
Mohit Jain

Reputation: 30489

Following is the prototype of tolower

int tolower(int c);

You should pass an int or something like char which can safely convert to int. Passing char * (Type of string) like you do leads to UB.

To convert a string to lowercase, you need to convert each character separately. One way to do this is:

char string[15] = "Strlwr in C";
char lstr[15];
int i = 0;
do {
  lstr[i] = tolower(string[i]);
} while(lstr[i] != '\0');
printf("%s", lstr);

Upvotes: 5

Yunnosch
Yunnosch

Reputation: 26703

Read cplusplus.com/reference/cctype/tolower It takes a single int as parameter, not char and not array.
You probably want to use a loop on "string", which processes each in turn.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
    int i;
    char string[15] = "Strlwr in C";
    for (i=0; i< sizeof(string)/sizeof(char); i++)
    {
        string[i]=(char)(tolower((int)string[i]));
    }

    printf("%s\n",string);
    return  0;
}

Output:

strlwr in c

Upvotes: 1

CIsForCookies
CIsForCookies

Reputation: 12817

You are using tolower incorrectly. This function returns int and gets int as a parameter (here is it's declaration: int tolower(int c);). What you want to do is call it on each char of your char array, and print each one:

    char string[15] = "Strlwr in C";
    for(int i = 0; i < strlen(string); i++)
        printf("%c",tolower(string[i]));

Upvotes: 2

Related Questions