以下、私の分析。ここで見たものから、char へのポインター (char*) と char 配列の違いをブラッシュアップする必要があります。質問する前に自分で解決しようとしてくれたことに本当に感謝しています。
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 < 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;
}
これがお役に立てば幸いです。申し訳ありませんが、苦労して学んだ方がいいと思うので、解決策を書くことはできません. char へのポインターのチュートリアルはたくさんあります。問題を解決できると確信しています。
(入力読み取り) C scanf() と fgets() の問題