C中的指针和文件I / O数组

问题描述 投票:0回答:2
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *strs[6], array[100];
    int i;
    FILE *file  = fopen("random.txt", "r");

    for (i=0 ; i<6; i++)
    {
        fscanf(file ,"%s", array);
        strs[i]= array;

        printf("%s ", strs[i]);
    }

    printf("%s", strs[3]);

    return 0;
}

在random.txt里面:

一二三四五六

输出是:一二三四五六六

我的问题是为什么最后一个'六',我无法访问'四'的第三个元素。为什么不将它们记录在char指针数组中?

c
2个回答
3
投票

问题是你的指针数组中的所有元素,即strs,都指向array。换句话说 - strs[0]指向arraystrs[1]指向arraystrs[2]指向array等等。

因此,当您更改array时,strs中的所有元素都指向新值。

它可以通过多种方式修复,但最简单的方法是:

//char *strs[6], array[100];
char strs[6][100];

// fscanf(file ,"%s", array);
// strs[i]= array;
fscanf(file ,"%s", strs[i]);

但是,请注意您的代码没有检查缓冲区溢出(这是不好的)。我建议您阅读有关fgets的内容


0
投票

你应该使用string.h库中的strcpy

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

int main()
{
    char strs[6][100] , array[100];
    int i;
    FILE *file  = fopen("random.txt", "r");

    for (i=0 ; i<6; i++)
    {
        fscanf(file ,"%s", array);
        strcpy(strs[i], array) ;

        printf("%s ", strs[i]);
    }

    printf("%s", strs[3]);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.