这是如何运作的?关于在数组中保存字符串

时间:2012-02-02 20:55:31

标签: c

我正在尝试从文本文件中读取一系列名称并将它们保存到数组中。 一切看起来都没问题,直到我尝试使用索引引用特定名称(例如: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

非常感谢

3 个答案:

答案 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]