如何从文本文件中读取字符串并将其存储在数组中

3
我正在处理一个班级项目,真的需要帮助。我需要实现的是从一个文本文件或两个单独的文件中读取两个字符串,并将它们分别存储在两个数组中。这些字符串可以是任意长度,但不必非常长。每个数组的大小可以根据相应字符串的长度自动调整。
我已经在 Stack Overflow 上搜索到了一些代码,尝试使用其中一个使用 malloc() 的代码。但当我尝试获取数组的大小时遇到了麻烦。
int main(){
int i = 0;

int BUFSIZE = 1000;
char* string[20];
FILE *fp = fopen("input.txt", "r");
if (fp == 0){
    fprintf(stderr, "Error while opening");
    return 0;
}

string[i] = (char *)malloc(BUFSIZE);
while (fgets(string[i], BUFSIZE, fp)) {
    i++;
    string[i] = (char *)malloc(BUFSIZE);
} 

float len=sizeof(string);
printf("%f", len);  

int x;
for(x = 0; x<i; x++)
   free(string[x]);
scanf("%d", x);
fclose(fp);
return 0;
}

我试图输出字符串的长度,但是无论字符串有多长,我得到的都是一个常量值80。此外,我不知道如何读取两个字符串并将它们存储在两个单独的数组中。当我尝试添加另一个字符串到代码中时,出现了错误。

2个回答

2

This:

float len=sizeof(string);

只是给你数组string静态大小,它是一个包含20个指针的数组,每个指针是4个字节,20 * 4字节 = 80,所以它总是80。因为你对每个字符串增加了i,所以你已经有了数组的大小,也就是你分配在数组中的字符串数,或者文件中的行数,只需打印i即可。

编辑: 如果你想获取数组中字符串的长度,请使用strlen

while (fgets(string[i], BUFSIZE, fp)) {
    i++;
    len+=strlen(string[i]);
    string[i] = (char *)malloc(BUFSIZE);    
} 

注意: 应该使用int而不是float,但这不是重点。

谢谢,但是当我打印i时得到了1,问题出在哪里? - phil
@phil 文件里有一行代码吗? - iabdalkader
是的,i代表行数吗?字符串在文件中是一行写的,我需要得到字符串本身的长度,但我真的不知道怎么做... - phil
1
@phil,另外,你真的应该多了解一下C语言,可以看看K&R的《C程序设计语言》。 - iabdalkader

1
如果您想获取字符串的长度,则需要使用:
strlen(string[i]);

你所做的只是返回字符串的大小,实际上是80(20*4)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接