Kushagra Sharma
Kushagra Sharma

Reputation: 21

String variable assignment gives pointer error

string reading_lev(int a, int b, int c)
{
    float L = (a / b) * 100;
    float S = (c / b) * 100;
    float index = 0.0588 * L - 0.296 * S - 15.8;
    if (round(index) <= 16 && round(index) >= 1)
    {
        string val = printf("Grade %f", index);
    }
    else if (round(index) > 16)
    {
        string val = printf("Grade 16+");
    }
    else
    {
        string val = printf("Before Grade 1");
    }
    return val
}

The error is in the first if block. There are cs50 libraries involved.

error: incompatible integer to pointer conversion initializing 'string' (aka 'char *') with an expression of type 'int' [-Werror,-Wint-conversion]

Upvotes: 1

Views: 96

Answers (2)

You can use sprintf to save the formatted data to a string. Be aware that you need a buffer big enough to save the string.

http://www.cplusplus.com/reference/cstdio/sprintf/

Upvotes: 1

Sourav Ghosh
Sourav Ghosh

Reputation: 134396

The error message is self explanatory.

printf() returns an int, you cannot assign it to variable of type char*.

That said, you have multiple other issues:

  • The return statement uses a block scope variable, which is out of it's scope.
  • The return statement is missing a ; - syntax error.

To fix the code what you need to do is:

  • Allocate a buffer long enough to hold the final output. (Define a pointer and use allocated memory using malloc() or family, of sufficient size)
  • Use sprintf() to populate the memory with the output you need.
  • Return the pointer.
  • Once you're done using it, free() the returned pointer.

Upvotes: 4

Related Questions