【问题标题】:How to read a string from a text file and store it in an array如何从文本文件中读取字符串并将其存储在数组中
【发布时间】:2012-11-09 19:24:41
【问题描述】:

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

我在 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。此外,我不知道如何读取两个字符串,并将它们存储在两个单独的数组中。尝试将另一个字符串添加到代码中时出现错误。

【问题讨论】:

  • @Bart Gotcha,不知道这一点,谢谢

标签: c arrays string


【解决方案1】:

这个:

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 文件中只有一行?
  • 是的,所以 i 代表行数?字符串写在文件中的一行,要自己获取字符串的长度,但是我真的不知道怎么...
  • @phil 还有,你真的应该阅读更多关于 C 的内容,查看 K&R 的 The C Programming Language
【解决方案2】:

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

strlen(string[i]);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多