2016-10-22 4 views
0

私のOSクラスでは、この行列乗算の結果をシステムコールのみを使用して出力する必要があります。私の講義ノートに続いて、私はこのコードを書きました。私は以下を使用します:システムコールを使用した結果の印刷

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

#define N 1000 

// Matrix 
long long int A[N][N],B[N][N],R[N][N]; 

int main(int argc, char *argv[]) 
{ 
int x,y,z; 
char str[100]; 

/* Matrix inicialization */ 
for(y=0;y<N;y++) 
    for(x=0;x<N;x++) 
    { 
     A[y][x]=x; 
     B[y][x]=y; 
     R[y][x]=0; 
    } 

/* Matrix multiplication */ 
for(y=0;y<N;y++) 
    for(z=0;z<N;z++) 
     for(x=0;x<N;x++) 
     { 
      R[y][x]+= A[y][z] * B[z][x];  
     } 


//System calls for printing the result 
sprintf(str,"%lld\n",R); 
write(1,str,strlen(str));  

exit(0); 
} 

これで、14295680がコンソールに表示されます。教授はマシンコードでファイルを与えてくれました。それは印刷されています332833500、これはもっと再構成可能です。

ありがとうございます。

編集:R [N] [N]は

+2

を 'sprintfのprintfの呼び出し EDIT2にタイプを変更() 'はシステムコールではありません。それはライブラリ関数です。それは本当に危険です。 – glauxosdever

+3

'R [N] [N]'は存在しません。 – ForceBru

+2

'long long int'を渡しながら浮動小数点フォーマット指定子を使用しています。これは未定義の動作です。 – Sergio

答えて

1

ただ、sprintfの値置き換える修正:

sprintf(str,"%lld\n",R[N-1][N-1]); // = 332833500 
write(1,str,strlen(str));  

代わりの

sprintf(str,"%lld\n",R); // this is a pointer 
write(1,str,strlen(str));  
関連する問題