#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中:
一二三四五六
输出为:
一二三四五六六
我的问题是为什么最后一个“6”,我不能访问第三个元素,即“4”。为什么不将它们记录在指针的char数组中?

最佳答案

问题是指针数组中的所有元素(即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

10-07 16:44