1

Can somebody tell me why this program does not work?

int main()
{
    char *num = 'h';
    printf("%c", num);
    return 0;
}

The error I get is:

1>c:\users\\documents\visual studio 2010\projects\sssdsdsds\sssdsdsds\sssdsdsds.cpp(4): error C2440: 'initializing' : cannot convert from 'char' to 'char *'

But if I write the code like that:

int main()
{
    char num = 'h';
    printf("%c", num);
    return 0;
}

it's working.

1
  • 2
    Why would you expect it to work? What do you think the '*' means, and why do you think putting it there doesn't matter? Commented Apr 20, 2011 at 15:22

6 Answers 6

5
char *num = 'h';

Here, the letter 'h' is a char, which you are trying to assign to a char*. The two types are not the same, so you get the problem that you see above.

This would work:

char *num = "h";

The difference is that here you're using double-quotes ("), which creates a char*.

This would also work:

char letter = 'h';
char* ptrToLetter = &letter;

You should read up on pointers in C to understand exactly what these different constructions do.

Sign up to request clarification or add additional context in comments.

Comments

2

char * is a pointer to a char, not the same thing than a single char.

If you have char *, then you must initialize it with ", not with '.

And also, for the formatting representation in printf():

  • the %s is used for char *
  • the %c is only for char.

Comments

0

In thefirst case you declared num as a pointer to a char. In the second case, you declare it as a char. In each case, you assign a char to the variable. You can't assign a char to a pointer to a char, hence the error.

Comments

0

'h' = Char "h" = Null terminated String

int main()
{
    char *num = "h";
    printf("%s", num);   // <= here change c to s if you want to print out string
    return 0;
}

this will work

Comments

0

As somebody just said, when you write

char *num = 'h'

The compiler gives you an error because you're trying to give to a pointer a value. Pointers, you know, are just variables that store only the memory address of another variable you defined before. However, you can access to a variable's memory address with the operator:

&

And a variable's pointer should be coerent in type with the element pointed. For example, here is how should you define correctly a ptr:

int value = 5;

//defining a Ptr to value

int *ptr_value = &value;

//by now, ptr_value stores value's address

Anyway, you should study somewhere how this all works and how can ptrs be implemented, if you have other problems try a more specific question :)

Comments

0

When you are using char *h, you are declaring a pointer to a char variable. This pointer keeps the address of the variable it points to.

In simple words, as you simply declare a char variable as char num='h', then the variable num will hold the value h and so if you print it using printf("%c",num), you will get the output as h.

But, if you declare a variable as a pointer, as char *num, then it cannot actually hold any character value. I can hold only the address of some character variable.

For example look at the code below

void main()
{
    char a='h';
    char *b;
    b=&a;
    printf("%c",a);
    printf("%c",b);
    printf("%u",b);
}

here , we have one char variable a and one char pointer b. Now the variable a may be located somewhere in memory that we do not know. a holds the value h and &a means address of a in memory The statement b=&a will assign the memory address of a to b. Since b is declared as a pointer, It can hold the address.

The statenment printf("%c",b) will print out garbage values.

The statement printf("%u",b) will print the address of variable a in memory.

so there's difference between char num and char *num. You must first read about pointers. They are different from normal variables and must be used very carefully.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.