#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]
指向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