空函数分割故障中的字符串错误

时间:2013-04-23 01:09:24

标签: c arrays string function

这是一个较大程序的一个void函数,具有打印一种图表的功能。它首先打印标题,然后使用for循环打印13行,调用来自4个数组的信息。名称,2D字符数组,分数,2D Int数组,平均值,1D Float数组和Letter,1D Char数组。

该功能本身如下:

void display(char names[][8], int scores[][4], float *average, char *letter)
{
  int q = 0;

  printf("\n\n Name \t E1 \t E2 \t E3 \t E4 \t Avg \t Grade");
  for(q=0; q<13; q++)
  {
    printf("\n %s \t %d \t %d \t %d \t %d \t %.2f \t %c", names[q][0], scores[q][0],
    scores[q][1], scores[q][2], scores[q][3],  average[q], letter[q]);
  }
return;
}

一旦我运行它,它运行良好,直到函数调用它,一旦我到达那里,我得到一个分段错误。作为参考,这是函数调用:

    display(&names, &scores, &average, &letter);

将printf中的%s更改为%c会停止分段错误,但是我需要它来打印数组中保存的字符串而不仅仅是单个字符。

那么如何在没有分段错误的情况下打印字符串(以及整个语句)?

1 个答案:

答案 0 :(得分:4)

我相信printf()应该如下,

printf("\n %s \t %d \t %d \t %d \t %d \t %.2f \t %c", names[q], scores[q][0],
    scores[q][1], scores[q][2], scores[q][3],  average[q], letter[q]);

在您的原始printf()中,您尝试使用names[q][0]打印单个字符(%s)。