Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从文本文件中读取字符串并将其存储在数组中_C_Arrays_String - Fatal编程技术网

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

C 如何从文本文件中读取字符串并将其存储在数组中,c,arrays,string,C,Arrays,String,我正在做一个班级项目,我真的需要帮助。我需要实现的是从一个文本文件或两个单独的文件中读取两个字符串,并将它们分别存储在两个数组中。字符串可以是任意长度,但不必很长。每个数组的大小可以根据相应字符串的长度自动调整 我搜索了堆栈溢出并得到了一些代码,我正在尝试一个使用malloc()的代码。但是,当我试图获得阵列的大小时,遇到了麻烦 int main(){ int i = 0; int BUFSIZE = 1000; char* string[20]; FILE *fp = fopen("inpu

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

我搜索了堆栈溢出并得到了一些代码,我正在尝试一个使用
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;
}
intmain(){
int i=0;
int BUFSIZE=1000;
字符*字符串[20];
文件*fp=fopen(“input.txt”,“r”);
如果(fp==0){
fprintf(标准“打开时出错”);
返回0;
}
字符串[i]=(char*)malloc(BUFSIZE);
while(fgets(string[i],BUFSIZE,fp)){
i++;
字符串[i]=(char*)malloc(BUFSIZE);
} 
float len=sizeof(字符串);
printf(“%f”,len);
int x;
对于(x=0;x

只给你数组的静态大小
string
,它是一个由20个指针组成的数组,每个指针是4个字节,20*4个字节=80,这就是为什么它总是80。你已经有了数组的大小,因为你为每个字符串增加了
i
,这就是数组的大小,只要按大小打印
i
,我是指数字of您在数组中分配的字符串,或文件中的行数

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

while (fgets(string[i], BUFSIZE, fp)) {
    i++;
    len+=strlen(string[i]);
    string[i] = (char *)malloc(BUFSIZE);    
} 
注:
它应该是
int
而不是
float
,但这不是重点。

如果需要字符串的长度,则需要使用

strlen(string[i]);

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

谢谢,但我打印I时得到了1,有什么问题吗?@phil文件中有一行?是的,所以我表示行数?字符串写在文件中的一行中,我必须得到字符串本身的长度,但我真的不知道如何…@phil还有,你真的应该阅读更多关于C的内容,检查C编程语言年龄比K&R@Bart明白了,我不知道,谢谢
strlen(string[i]);