※ ChatGPTを利用し、要約された質問です(原文:構造体のコピーについて)
構造体のコピーについて
このQ&Aのポイント
次のプログラムを実行して、originalは偶数、copyは奇数を表示するようにしたいのですが、実行すると両方とも奇数になってしまいます。正しく表示されるようにするにはどこを直せばいいのか教えてください。
構造体のコピーについてのプログラムを実行していると、originalとcopyの両方が奇数になってしまいます。どこを修正すれば、originalが偶数で、copyが奇数になるようになるのでしょうか?
次のプログラムでは、originalとcopyのデータが同じになってしまいます。originalは偶数、copyは奇数になるように結果を表示するためにはどうすればいいのでしょうか?
次のプログラムを実行してoriginalは偶数、copyは奇数を表示するようにしたいのですが、実行すると両方とも奇数になってしまいます。
正しく表示されるようにするにはどこを直せばいいのか教えてください。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct structSample_
{
unsigned int nmemb; /*配列の要素数 */
int *data; /* データを格納する配列 */
}Sample;
/* 関数のプロトタイプ宣言 */
Sample *alloc_str ( unsigned int nmenb ); /* 新しい構造体を確保 */
/* main関数 */
int main ( void )
{
Sample *original_str, *copy_str;
unsigned int number = 10;
int i;
/* 構造体用のメモリ割り当て */
original_str = alloc_str ( number );
copy_str = original_str;
/* original にデータを代入 */
for( i = 0; i < original_str->nmemb; i++ )
original_str -> data[i] = (i+1) * 2; /* 偶数を代入 */
/* original を copy に複製 */
copy_str = original_str;
/* copy のデータを編集 */
for( i = 0; i < copy_str->nmemb; i++ )
copy_str->data[i]--; /* 奇数にする */
/* 結果の確認
* original には偶数が入っているはず */
printf( "original: " );
for( i = 0; i < original_str->nmemb; i++ )
printf( "%d ", original_str->data[i] );
printf( "\n" );
/* copy には奇数がはいっているはず */
printf( " copy : " );
for( i = 0; i < copy_str->nmemb; i++ )
printf( "%d ", copy_str->data[i] );
printf( "\n" );
return 0;
}
お礼
わかりやすく教えていただきありがとうございます。 直したところ、正しく表示されました。