knb-nkmのプロフィール

@knb-nkm knb-nkm
ありがとう数5
質問数0
回答数10
ベストアンサー数
4
ベストアンサー率
66%
お礼率
0%

  • 登録日2010/08/05
  • localtime() 関数についての質問

    C言語の勉強をして間もない者です。 time_t = current; struct tm = *local; time(&current); local = localtime(&current); こんなのがlocaltime関数を使った一般的なプログラムだと思いますが、なぜlocaltimeの引数がcurrentのポインタなのでしょうか? 別にcurrentには値を代入しないのだから、localtime(current)でもいいとおもうのですが、ポインタにした必然的理由があるのでしょうか?

  • localtime() 関数についての質問

    C言語の勉強をして間もない者です。 time_t = current; struct tm = *local; time(&current); local = localtime(&current); こんなのがlocaltime関数を使った一般的なプログラムだと思いますが、なぜlocaltimeの引数がcurrentのポインタなのでしょうか? 別にcurrentには値を代入しないのだから、localtime(current)でもいいとおもうのですが、ポインタにした必然的理由があるのでしょうか?

  • 2次元配列からダブルポインタへの合わせ方

    固定要素数の行列の処理ですが、subでセグメントエラーを起こしています。 アドレスを出力してみると、subでは元々確保したアドレスでは無いところを指しています。 呼び出し側では「行列の先頭のアドレス」を明示したつもりだったのですが、どこが間違っているのでしょうか。少し長いですが、ソースコードと出力を示します。 typedefのところとsubのIFは変更できないので、double[3][3]とdouble** のIFを合わせないといけないのですが、合わせ方がよくわかりません。 よろしくお願いします。 ========================================= #include <stdio.h> #include <string.h> typedef double Matrix[3][3]; void sub( const double** mat ); int main(void) {  int ret = 0;  int i, j;  Matrix mat = { { 0., 1., 2. },      { 3., 4., 5. },      { 6., 7., 8. } };    for( i = 0; i < 3; i++ ){   for( j = 0; j < 3; j++ ){    printf( "main : mat[%d][%d] = %f\n", i, j, mat[i][j] );    printf( "main : &mat[%d][%d] = %p\n", i, j, &mat[i][j] );   }  }  printf( "\n" );  sub( &mat[0][0] );  return ret; } void sub( const double** mat ) {  int i, j;  printf("---- &mat = %p\n", &mat );  for( i = 0; i < 3; i++ ){   for( j = 0; j < 3; j++ ){    printf( "sub : mat[%d][%d] = %f\n", i, j, mat[i][j] );    printf( "sub : &mat[%d][%d] = %p\n", i, j, &mat[i][j] );   }  }  printf( "\n" ); } ========================================= main : mat[0][0] = 0.000000 main : &mat[0][0] = 0x7ffffca7bca0 main : mat[0][1] = 1.000000 main : &mat[0][1] = 0x7ffffca7bca8 main : mat[0][2] = 2.000000 main : &mat[0][2] = 0x7ffffca7bcb0 main : mat[1][0] = 3.000000 main : &mat[1][0] = 0x7ffffca7bcb8 main : mat[1][1] = 4.000000 main : &mat[1][1] = 0x7ffffca7bcc0 main : mat[1][2] = 5.000000 main : &mat[1][2] = 0x7ffffca7bcc8 main : mat[2][0] = 6.000000 main : &mat[2][0] = 0x7ffffca7bcd0 main : mat[2][1] = 7.000000 main : &mat[2][1] = 0x7ffffca7bcd8 main : mat[2][2] = 8.000000 main : &mat[2][2] = 0x7ffffca7bce0 ---- &mat = 0x7ffffca7bc68 セグメンテーション違反です

  • 2次元配列からダブルポインタへの合わせ方

    固定要素数の行列の処理ですが、subでセグメントエラーを起こしています。 アドレスを出力してみると、subでは元々確保したアドレスでは無いところを指しています。 呼び出し側では「行列の先頭のアドレス」を明示したつもりだったのですが、どこが間違っているのでしょうか。少し長いですが、ソースコードと出力を示します。 typedefのところとsubのIFは変更できないので、double[3][3]とdouble** のIFを合わせないといけないのですが、合わせ方がよくわかりません。 よろしくお願いします。 ========================================= #include <stdio.h> #include <string.h> typedef double Matrix[3][3]; void sub( const double** mat ); int main(void) {  int ret = 0;  int i, j;  Matrix mat = { { 0., 1., 2. },      { 3., 4., 5. },      { 6., 7., 8. } };    for( i = 0; i < 3; i++ ){   for( j = 0; j < 3; j++ ){    printf( "main : mat[%d][%d] = %f\n", i, j, mat[i][j] );    printf( "main : &mat[%d][%d] = %p\n", i, j, &mat[i][j] );   }  }  printf( "\n" );  sub( &mat[0][0] );  return ret; } void sub( const double** mat ) {  int i, j;  printf("---- &mat = %p\n", &mat );  for( i = 0; i < 3; i++ ){   for( j = 0; j < 3; j++ ){    printf( "sub : mat[%d][%d] = %f\n", i, j, mat[i][j] );    printf( "sub : &mat[%d][%d] = %p\n", i, j, &mat[i][j] );   }  }  printf( "\n" ); } ========================================= main : mat[0][0] = 0.000000 main : &mat[0][0] = 0x7ffffca7bca0 main : mat[0][1] = 1.000000 main : &mat[0][1] = 0x7ffffca7bca8 main : mat[0][2] = 2.000000 main : &mat[0][2] = 0x7ffffca7bcb0 main : mat[1][0] = 3.000000 main : &mat[1][0] = 0x7ffffca7bcb8 main : mat[1][1] = 4.000000 main : &mat[1][1] = 0x7ffffca7bcc0 main : mat[1][2] = 5.000000 main : &mat[1][2] = 0x7ffffca7bcc8 main : mat[2][0] = 6.000000 main : &mat[2][0] = 0x7ffffca7bcd0 main : mat[2][1] = 7.000000 main : &mat[2][1] = 0x7ffffca7bcd8 main : mat[2][2] = 8.000000 main : &mat[2][2] = 0x7ffffca7bce0 ---- &mat = 0x7ffffca7bc68 セグメンテーション違反です

  • 教えていただけませんか?C言語 文字列について

    学校で文字列のプログラムを組む課題が出ました 以下のような課題です 1つの文字列を読み込んで,ピリオドで改行し出力するプログラムを作成しろ ・読み込む文字列の長さ 最大で80文字 ・文字列の終わりは必ずピリオドで ・文字列の途中に現れるピリオドの次には必ずスペースが続く ・ピリオドに続くスペースは出力しない 例えば Hello. It is fine. Good-bye.  と打つと Hello. It is fine. Good-bye. と表示されるようなプログラムです そして自分で以下のプログラムを組みました ----------------------------------------------------------- #include <stdio.h> #include <string.h> int main(void){ int i; char A[100]; char *a; fgets(A,80,stdin); a = strtok(A, "."); printf("%s.\n",a); while(a != NULL){ a = strtok(NULL,"."); if (a != NULL){ printf("%s.\n",a); } } return 0; } --------------------------------------------------------------- ですがこれだとピリオドの後のスペースと文字列の後によくわからない改行が出力されてしまいます 自分で何とかするべきなのでしょうがどうにもうまく行きません どこをどうすればいいのか教えていただけないでしょうか?