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;
}

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

4

2 回答 2

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

于 2012-11-09T19:31:07.250 回答
1

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

strlen(string[i]);

您所做的将简单地返回字符串的大小,实际上是 80 (20*4)。

于 2012-11-09T19:52:12.797 回答