我正在尝试从文本文件中读取一系列名称并将它们保存到数组中。 一切看起来都没问题,直到我尝试使用索引引用特定名称(例如:array [0])。它给了我t25.txt它应该给我t1.txt。我做错了什么?
以下是我所拥有的:
#define MAX_STRING 25
FILE *in;
in = fopen("filenames.txt", "r");
if (!in) {
printf("Failed to open the file\n");
exit(1);
}
char array[MAX_STRING];
// In my mind, I want it to look like this:
// array[0] = t1.txt
// array[1] = t2.txt
int i;
for ( i = 0; i < MAX_STRING; i++ ) // Get 25 words
{
fscanf( in, "%s", array);
printf( "filename = %s\n", array);
// I print it out to make sure it's getting what i want and it did
}
我的文本文件 - filenames.txt就像这样
t1.txt
t2.txt
非常感谢
答案 0 :(得分:4)
char array[MAX_STRING];
是一个字符数组,而不是字符串数组。您的循环会在每次迭代中覆盖此数组。你可能意味着像
这样的东西char array[N_STRINGS][MAX_LENGTH_OF_A_SINGLE_STRING];
答案 1 :(得分:1)
您没有在一个数组中保存多个字符串,而是多次覆盖一个字符串。
在C中,每个字符串都保存为数组,因此您必须拥有类似2D数组的内容:维度1:字符串,维度2:“数组”:
array[MAX_STRING][MAX_NAME_LEN]
这是你打算做的!
你必须将C-Strings理解为连续memmory中的一个字符数组,最后用\ 0来识别“字符串”的结尾。在处理字符串时,您正在处理数组!
答案 2 :(得分:1)
定义char array[MAX_STRING];
,它只定义一个字符串
所以
array[0] = 't'
array[1] = 'x'
您需要的是char array[NUM_STRING][MAX_STRING]