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

时间:2012-11-09 19:24:42

标签: c arrays string

我正在做一个课程项目,我真的需要帮助。我需要意识到的是从一个文本文件或两个单独的文件中读取两个字符串,并将它们分别存储在两个数组中。弦可以是任何长度,但不必非常长。每个数组的大小可以根据相应字符串的长度自动调整。

我搜索了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;
}

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

2 个答案:

答案 0 :(得分:2)

此:

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,但这不是重点。

答案 1 :(得分:1)

如果你想要字符串的长度,那么你需要使用

strlen(string[i]);

你正在做的只是返回字符串的大小,这确实是80(20 * 4)。