メイン関数内でmallocを用いて別のやり方を検討しました。今回は配列を用いて、関数なしで、新たに生成された配列をコピーするというプログラムです。
前回の質問通りにmain関数で実行したところ、while文が実行されなくて条件がfalseとみなされて、ヘヘヘヘヘヘヘヘヘヘといった文字がコマンドプロンプトに出力されてコピーできない状態となっております。while文内でブレークポイントを入れても素通りしてしまいます。つまり、mallocでaのバイト数を確保したにもかかわらずfalseを満たすのはどうしてでしょうか。
プログラムコードは前回同様にポインタ変数resultを用いて、先頭のアドレスを確保し、while文内で、0が出でくるまで、aの文字列の値をcに代入させています。
そこで、 printf("%s\n", result);でcのアドレスの先頭部分であるポインタ変数resultで文字列のコピーを出力します。そこでいらなくなったメモリ領域を解放しています。
といったやり方でmallocでの確保した領域を文字列aをコピーします。
どうかご協力を願います。
#include <stdio.h> #include <stdlib.h> char main(void ) { int i=0; char* c; char a[10] = "aaaaa" ; for (i = 0; a[i] != '\0'; ++i); c = (char*)malloc(sizeof(a)); char* result = c; while (a[i] != '\0') { c[i] = a[i]; i++; } printf("%s\n", result); free(result); return 0; }
回答1件
あなたの回答
tips
プレビュー