プログラムに問題があります: sprintf 関数でセグメンテーション違反が発生し続けますが、その理由がわかりません。バッファーは十分に大きく、ポインターを正しく渡していると思いますが、理由がわかりませんうまくいきません。
コードは次のとおりです。
呼び出し:
char dataBuff[100];
//same error with char *dataBuff=malloc(sizeof(char)*100);
//those vars were declared before
int tmpData[5]={TID,i,JobList[i].Num1,JobList[i].Op,JobList[i].Num2};
//here's the function that return the sigsegv error
BuildCMD(CALC,tmpData,0.f,dataBuff);
BuildCMD コード:
int BuildCMD(enum CMD cmd,int *values,float Res,char *dataBuff)
{
switch(cmd)
{//........
case CALC:
{
//this line cause the error,it's just a formatted parameters list
//note:same error with just
//sprintf(dataBuff,"abc");
spritf(dataBuff,"0*;%d;%d;%d;%d;%d;%d;%.5f|\n",cmd,values[0],values[1],values[2],values[3],values[4],Res);
break;
}
//........
}
}
sprintf を使用して通常の定数文字列を保存しようとしても、同じエラーが発生するため、問題は「dataBuff」であると確信しています。それはただ...私が間違っていることを理解できません。前もって感謝します。
編集:関数ヘッダーとして解決された問題:
int BuildCMD(enum CMD cmd,int *values,float Res,char dataBuff[100])
sprintf 呼び出しとして:
sprintf(&dataBuff,"0*;%d;%d;%d;%d;%d;%d;%.5f|\n",cmd,values[0],values[1],values[2],values[3],values[4],Res);