a)どこが間違っていたのか、プログラミングロジックが失敗したのか。
さて、あなたはいくつかのことを間違ってしました。1つvoid main
は、非標準です。の戻りタイプは。でmain
ある必要がありますint
。
そうは言っても、あなたが探している本当のq
問題は、初期化されていないという事実に関係していますが、それでもそれを介してメモリにコピーしようとします(これは未定義の動作です)。これを修正するにはq
、たとえば、
char *q = malloc(8);
free
その後、ここで割り当てられたメモリにも注意を払う必要があることに注意してください。
それとは別に、NUL
ターミネーターをコピーするのも忘れています。
*q = 0;
...コピーループの後。また、ポインタをインクリメントした後に印刷q
しているため、呼び出しの時点でポインタが文字列の先頭に表示されなくなりますprintf
。ヘッドのコピーを別の変数に格納する必要があります。さらに、ストリームがバッファリングされてフラッシュされないままになる可能性があるため、新しい行のないプレーンを使用する場合は注意が必要printf
です。明示的に使用してください。fflush(stdout);
b)このコードを改善して目的の出力を得るにはどうすればよいですか?
さて、私が考えることができる最初の最も簡単な改善は、を使用することstrcpy
です。
#include <stdio.h>
main() {
const char p[] = "krishna";
char q[sizeof p];
strcpy(q, p);
puts(q);
getchar();
return 0;
}