字符串数组正确扫描,然后一起运行

时间:2017-11-01 16:51:56

标签: c arrays string

我有一个功能,旨在从输入文件中读取多个字符串,以便稍后再调用它们。编码如下:

int load_mpn_search(char search_filename[], int size, char search_array[][5])
{
int search_size = 0;
int n = 0;
FILE * infile;
int i = 0;


infile = fopen(search_filename, "r");

if(infile==NULL)
{
    printf("\nUnable to open %s\n", search_filename);
}

else
{   
printf("\n\nDuring Scan:");
    while(fscanf(infile, "%s\n", search_array[n]) != EOF)
            {
                printf("\n%d  %s",n, search_array[n]);
                n++;
            }

            search_size = n;
}
fclose(infile);

这似乎从输入文件中正确地拉出所有字符串,并将它们存储在数组中。我使用print函数向我显示存储的内容,以及我得到的内容是:

During Scan:
0  2-1-0
1  1-0-2
2  1-3-5
3  1-10
4  3-3-0
5  5-1-0
6  5-1-0-1
7  5-2-1

然而,在同一个程序之后,我尝试将它们打印回来以查看使用它存储的内容:

printf("\n\nIn Function:");


for(i = 0; i < search_size; i++)
{
    printf("\ni = %d", i);
     printf("\t search_array[%d] = %s", i, search_array[i]);
}

我得到的是:

In Function:
i = 0    search_array[0] = 2-1-01-0-21-3-51-10
i = 1    search_array[1] = 1-0-21-3-51-10
i = 2    search_array[2] = 1-3-51-10
i = 3    search_array[3] = 1-10
i = 4    search_array[4] = 3-3-05-1-05-1-05-2-1
i = 5    search_array[5] = 5-1-05-1-05-2-1
i = 6    search_array[6] = 5-1-05-2-1
i = 7    search_array[7] = 5-2-1

每个字符串应该只有5个字符长,除了i = 6,这是7个字符长,但似乎程序将它们聚在一起形成一个看似随机的集合并重复整个文件以填充数组中的所有字符串。任何帮助将是真诚的感谢。谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为char search_array[][5]是一个字母太小,例如1-2-3,包括\0在内的六个。结果,在每个fscanf上,前一个条目的终止空字符被覆盖。条目3小于6,因此其终结符不会被覆盖。

答案 1 :(得分:1)

字符串长度不够

int load_mpn_search(char search_filename[], int size, char search_array[][5]);

增加尺寸

int load_mpn_search(char search_filename[], int size, char search_array[][128]);

请注意,您需要为&#39; \ 0&#39;同样。