fscanf的有关问题

fscanf的问题
C/C++ code

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

int main()
{
    FILE *fp;
    char p[10];
    char *q[10];

    int i = 0;
    int j, k;

    if((fp = fopen("word.txt", "r+")) == NULL)
    {
        printf("cannot open word.txt");
        exit(0);
    }

    while (!feof(fp))
    {
        fscanf(fp, "%s", p);
        q[i] = p;    //还没执行这一行,q[i]的值就已经变了
        for (j = 0; j <= i; j++)
            printf("q[%d] = %s\n", j, q[j]);
        printf("\n");
        i++;
    }

}



word.txt的内容是:

C/C++ code
a bc def wxyz


输出为什么是这样的?

C/C++ code

q[0] = a

q[0] = bc
q[1] = bc

q[0] = def
q[1] = def
q[2] = def

q[0] = wxyz
q[1] = wxyz
q[2] = wxyz
q[3] = wxyz

请按任意键继续. . .



q[0]的值为什么会变?

------解决方案--------------------
q[i] = p; 
q[i]指向了数组p.
p里面fscanf之后改变了.q[i]的内容必然会相应的改变啊