从指向行文件的指针复制char数组后的奇怪输出

时间:2014-04-19 18:40:29

标签: c arrays pointers

我正在尝试将数据读取并存储在某个文件中(我有另一个程序告诉我我有多少行和列)。现在我尝试使用二维数组,指针和fgets将数据存储在文件中。

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

int main (void)
{
    int i=0,b=0;
    char value[1024][3];
    char (*p)[3] = value;

    char line[1024];
    FILE *fp=fopen("text.txt", "r");
    if(fp==NULL){
        printf("\nThe file does not exist\n");
    }
    else{
        while( fgets ( line, sizeof(line), fp ) != NULL  )
            {
                strcpy(p[i],line);
                printf ("%s",p[i]);
                printf("\n");
                i++;

             }
             printf ("%s",value[0]);
             printf("\n");

    }



    return 0;
}

据我所知(我知道我错了......因为我有一个奇怪的输出)。 p指向值,然后我使用strcpy将内容从第(1)行复制到p(1)和值[lenght] [1]。

while内部的输出是ok p [0]打印正确的数字,也是p [1],依此类推。当我尝试在循环外打印值(验证)时,我得到一个奇怪的输出。

该文件为ASCII,其内容为(无行,代表标签):

1-2-3-44

2-33-4-5

22-3-5-12

while处的打印显示下一个(没有行,它们代表一个标签):

1-2-3-44

2-33-4-5

22-3-5-12

外面的打印显示下一个:

1-22-322-3-5-12

打印1行的前两个数字,第二行的前两个数字和完整的第三行。但是,如果我将p [0]更改为p [2],则会打印第三行而不会出现错误:

22-3-5-12

1 个答案:

答案 0 :(得分:2)

你可能想要三行1024个字符。

使用此char value[1024][3];,您有1024行3个字符。

切换数组值和指针p的高度和宽度。