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]は
を 'sprintfのprintfの呼び出し EDIT2にタイプを変更() 'はシステムコールではありません。それはライブラリ関数です。それは本当に危険です。 – glauxosdever
'R [N] [N]'は存在しません。 – ForceBru
'long long int'を渡しながら浮動小数点フォーマット指定子を使用しています。これは未定義の動作です。 – Sergio