#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指针数组中?
问题是你的指针数组中的所有元素,即strs
,都指向array
。换句话说 - strs[0]
指向array
,strs[1]
指向array
,strs[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
的内容
你应该使用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;
}