NouName NouName - 2 months ago 13
C Question

Wrong output from tolower fuction

I have a problem with tolower function. Tried to use it with argv but output was $0@. What's wrong with my code?

#include <stdlib.h>
#include <stdio.h>

void makeLower(char *s) {
int i;
for(i = 0; s[i] != '\0'; i++){
s[i] = tolower(s[i]);
printf("%s", s);

int main(int argc, char *argv[]) {

return 0;

usr usr

argv is a pointer to pointer, which is a char**. But the function takes a char*. So, you need to pass like:


But this isn't going to work because the argv[0] now points to a string literal. Modifying a string literal is undefined.

Instead pass a modifiable array like:

int main(int argc, char *argv[]) {
    char arr[] = "A";

    return 0;

Other option is to make a copy of the string literal passed (via argv[0]) and then you will be able to modify it. Basically, the idea is that you can't legally modify string literals in C.