Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>My analysis below. From what I see here you should brush up on the difference between a pointer to char (char*) and a char array. I really appreciate though that you've tried to solve it yourself before asking.</p> <pre><code>const char *sCopy(char buffer[256], int i); /* let's start from here, what i represents? Keep in mind that the most of the */ /* time an external developer will see just your declaration of a method, always */ /* try to give significant names to variables. */ int main() { int i = 0; /* always initialize variables to default values, especially if they are */ /* going to be indexes in a buffer. */ int x = 0; char buffer[256] = ""; /* you can even initialize this to "" in order to mimic an empty string, */ /* that is a char array cointining just \0 (string null-terminator). */ char newBuffer[256] = ""; /* same here, you always need to declare the size of a char array unless */ /* you initialize it like this -char newBuffer[] = "hello"-, in which case */ /* the size will automatically be 6 (I'll let you discover/understand */ /* why 6 and not 5). */ printf("Please enter a number: "); fgets(buffer, 256, stdin); // nice link at the bottom on input reading i = atoi(buffer); printf("The value you entered is %d. Its double is %d.\n", i, i*2); newBuffer = sCopy(buffer, i); printf(newBuffer); return 0; } /* I am not going to debate the idea of returning a char pointer here :) */ /* Remember that in this case you are returning a pointer to some memory that has */ /* been allocated somewhere inside your function and needs to be released (freed) */ /* by someone outside your control. Are they going to remember it? Are they */ /* going to do it? In this case "they" is "you" of course. */ /* I'll let you explore alternative approaches. */ const char *sCopy(char buffer[256], int i){ char nBuffer[256] = ""; // see above char *t = NULL; /* you always init a pointer to NULL. As you can see, initializing here will */ /* make you think that there might be problem with the strcat below. */ int x; // ok here you can omit the init, but be aware of it. for(x = 0; x &lt; i; x++){ strcat(t, buffer); /* what are you missing here? this piece of code is supposed to concatenate the */ /* input buffer to a brand new buffer, pointed by your variable t. In your implementation */ /* t is just a pointer, which is nothing more than a number to a memory location */ /* With the initialization, the memory location you are pointing to is NULL, which */ /* if de-referenced, will cause massive problems. */ /* What you are missing is the blank slate where to write your data, to which your */ /* pointer will read from. */ } //t = nBuffer; return t; } </code></pre> <p>I really hope that this would help you. I am sorry but I can't write the solution just because I think it's better if you learn it the hard way. You can find plenty of tutorials of pointers to char and I am sure you will solve the problem.</p> <p>(input reading) <a href="https://stackoverflow.com/questions/7060573/c-scanf-and-fgets-problem">C scanf() and fgets() problem</a></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload