C语言从文件中读取字符串存入到存入字符串数组中

时间:2023-01-04 14:42:36
如题,我从文件中读取了几个字符串,然后想把这些字符串保存到数组中,该怎么做?

16 个解决方案

#1


 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?

#2


求大神帮帮忙啊

#3


一次while读取一个字符串?
b[n]=szTest[n]; 只赋值一个字符?

#4


引用 3 楼 qq423399099 的回复:
一次while读取一个字符串?
b[n]=szTest[n]; 只赋值一个字符?

一次是读取一个字符串,但是我不知道是不是只赋值一个字符

#5


仅供参考:
//NAME: essaie bla bla
//DIMENSION: 8
//DATA
//1  14  15
//2  11  10
//3  6   4
//4  7   13
//5  9   21
//6  19  3
//7  1   5
//8  8   8
//EOF
//
// 文本文件中可能还含有其他内容,但是需要用到的内容即以上

//比如data.txt:
//NAME: essaie bla bla
//其它内容
//DIMENSION: 8
//其它内容
//DATA
//其它内容
//1  14  15
//其它内容
//2  11  10
//其它内容
//3  6   4
//其它内容
//4  7   13
//其它内容
//5  9   21
//其它内容
//6  19  3
//其它内容
//7  1   5
//其它内容
//8  8   8
//其它内容
//EOF

// 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值
// 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标
// 所有的这些将赋值给一个事先定义好的结构
#include <stdio.h>
#include <string.h>
#define MAXCPL   80   //每行最大字符数
#define MAXCITY  100  //每组数据中DATA最多项数,DIMENSION的最大值
#define MAXNAMEL 32   //NAME最大长度
struct S {
    char NAME[MAXNAMEL+1];
    int  DIMENSION;
    struct D {
        int NO;
        int X;
        int Y;
    } DATA[MAXCITY];
} s;
FILE *f;
int st,n,i;
char ln[MAXCPL];
int main() {
    f=fopen("data.txt","r");
    if (NULL==f) {
        printf("Can not open file data.txt!\n");
        return 1;
    }
    st=0;
    n=0;
    while (1) {
        if (NULL==fgets(ln,MAXCPL,f)) break;
        if (st==0) {
            if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;
        } else if (st==1) {
            if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
        } else if (st==2) {
            if (0==strcmp(ln,"DATA\n")) st=3;
        } else if (st==3) {
            if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
                n++;
                if (n>=MAXCITY || n>=s.DIMENSION) break;
            }
        }
    }
    fclose(f);
    printf("s.NAME=[%s]\n",s.NAME);
    printf("s.DIMENSION=%d\n",s.DIMENSION);
    for (i=0;i<n;i++) {
        printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
    }
    return 0;
}
//s.NAME=[essaie bla bla]
//s.DIMENSION=8
//s.DATA[0].NO,X,Y=1,14,15
//s.DATA[1].NO,X,Y=2,11,10
//s.DATA[2].NO,X,Y=3,6,4
//s.DATA[3].NO,X,Y=4,7,13
//s.DATA[4].NO,X,Y=5,9,21
//s.DATA[5].NO,X,Y=6,19,3
//s.DATA[6].NO,X,Y=7,1,5
//s.DATA[7].NO,X,Y=8,8,8

#6


引用 1 楼 qq_29582387 的回复:
 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

#7


引用 6 楼 paschen 的回复:
Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改

#8


引用 7 楼 qq_29582387 的回复:
Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

#9


引用 8 楼 paschen 的回复:
Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个

#10


用二维数组,并且字符串拷贝要用strcpy而不是直接用等号

#11


引用 7 楼 qq_29582387 的回复:
Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

#12


引用 11 楼 paschen 的回复:
Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

#13


引用 12 楼 qq_29582387 的回复:
Quote: 引用 11 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

可以了,谢谢!
顺便问一下大神,怎么设立条件才能在fgets读到最后一行空串的时候直接结束,而不读取字符,在中间读到空串的时候我是这样写的if ( szTest[0]=='\n' || szTest[0]=='\r' ) 
{
continue;
},可以跳过那一个空串,但是最后的那个就不行!请教一下大神们

#14


引用 13 楼 qq_29582387 的回复:
Quote: 引用 12 楼 qq_29582387 的回复:

Quote: 引用 11 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

可以了,谢谢!
顺便问一下大神,怎么设立条件才能在fgets读到最后一行空串的时候直接结束,而不读取字符,在中间读到空串的时候我是这样写的if ( szTest[0]=='\n' || szTest[0]=='\r' ) 
{
continue;
},可以跳过那一个空串,但是最后的那个就不行!请教一下大神们


检查fgets返回是否为NULL,如果是,判断是否达到文件尾(feof),如果是表示已经读完可结束

#15


引用 14 楼 paschen 的回复:
Quote: 引用 13 楼 qq_29582387 的回复:

Quote: 引用 12 楼 qq_29582387 的回复:

Quote: 引用 11 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

可以了,谢谢!
顺便问一下大神,怎么设立条件才能在fgets读到最后一行空串的时候直接结束,而不读取字符,在中间读到空串的时候我是这样写的if ( szTest[0]=='\n' || szTest[0]=='\r' ) 
{
continue;
},可以跳过那一个空串,但是最后的那个就不行!请教一下大神们


检查fgets返回是否为NULL,如果是,判断是否达到文件尾(feof),如果是表示已经读完可结束

表示具体代码不知道怎么实现,我想照着我原来的代码改,可是一直没改成功,我是初学者 C语言从文件中读取字符串存入到存入字符串数组中

#16


试试看下面这段代码行不行

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;

char *filename = "abc.dat";
vector<string> container;
ifstream ifs(filename);
copy(ifstream_iterator(ifs), ifstream_iterator(), back_inserter<string>(container));

主要思想是利用STL中的istream_iterator

#1


 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?

#2


求大神帮帮忙啊

#3


一次while读取一个字符串?
b[n]=szTest[n]; 只赋值一个字符?

#4


引用 3 楼 qq423399099 的回复:
一次while读取一个字符串?
b[n]=szTest[n]; 只赋值一个字符?

一次是读取一个字符串,但是我不知道是不是只赋值一个字符

#5


仅供参考:
//NAME: essaie bla bla
//DIMENSION: 8
//DATA
//1  14  15
//2  11  10
//3  6   4
//4  7   13
//5  9   21
//6  19  3
//7  1   5
//8  8   8
//EOF
//
// 文本文件中可能还含有其他内容,但是需要用到的内容即以上

//比如data.txt:
//NAME: essaie bla bla
//其它内容
//DIMENSION: 8
//其它内容
//DATA
//其它内容
//1  14  15
//其它内容
//2  11  10
//其它内容
//3  6   4
//其它内容
//4  7   13
//其它内容
//5  9   21
//其它内容
//6  19  3
//其它内容
//7  1   5
//其它内容
//8  8   8
//其它内容
//EOF

// 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值
// 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标
// 所有的这些将赋值给一个事先定义好的结构
#include <stdio.h>
#include <string.h>
#define MAXCPL   80   //每行最大字符数
#define MAXCITY  100  //每组数据中DATA最多项数,DIMENSION的最大值
#define MAXNAMEL 32   //NAME最大长度
struct S {
    char NAME[MAXNAMEL+1];
    int  DIMENSION;
    struct D {
        int NO;
        int X;
        int Y;
    } DATA[MAXCITY];
} s;
FILE *f;
int st,n,i;
char ln[MAXCPL];
int main() {
    f=fopen("data.txt","r");
    if (NULL==f) {
        printf("Can not open file data.txt!\n");
        return 1;
    }
    st=0;
    n=0;
    while (1) {
        if (NULL==fgets(ln,MAXCPL,f)) break;
        if (st==0) {
            if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;
        } else if (st==1) {
            if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
        } else if (st==2) {
            if (0==strcmp(ln,"DATA\n")) st=3;
        } else if (st==3) {
            if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
                n++;
                if (n>=MAXCITY || n>=s.DIMENSION) break;
            }
        }
    }
    fclose(f);
    printf("s.NAME=[%s]\n",s.NAME);
    printf("s.DIMENSION=%d\n",s.DIMENSION);
    for (i=0;i<n;i++) {
        printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
    }
    return 0;
}
//s.NAME=[essaie bla bla]
//s.DIMENSION=8
//s.DATA[0].NO,X,Y=1,14,15
//s.DATA[1].NO,X,Y=2,11,10
//s.DATA[2].NO,X,Y=3,6,4
//s.DATA[3].NO,X,Y=4,7,13
//s.DATA[4].NO,X,Y=5,9,21
//s.DATA[5].NO,X,Y=6,19,3
//s.DATA[6].NO,X,Y=7,1,5
//s.DATA[7].NO,X,Y=8,8,8

#6


引用 1 楼 qq_29582387 的回复:
 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

#7


引用 6 楼 paschen 的回复:
Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改

#8


引用 7 楼 qq_29582387 的回复:
Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

#9


引用 8 楼 paschen 的回复:
Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个

#10


用二维数组,并且字符串拷贝要用strcpy而不是直接用等号

#11


引用 7 楼 qq_29582387 的回复:
Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

#12


引用 11 楼 paschen 的回复:
Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

#13


引用 12 楼 qq_29582387 的回复:
Quote: 引用 11 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

可以了,谢谢!
顺便问一下大神,怎么设立条件才能在fgets读到最后一行空串的时候直接结束,而不读取字符,在中间读到空串的时候我是这样写的if ( szTest[0]=='\n' || szTest[0]=='\r' ) 
{
continue;
},可以跳过那一个空串,但是最后的那个就不行!请教一下大神们

#14


引用 13 楼 qq_29582387 的回复:
Quote: 引用 12 楼 qq_29582387 的回复:

Quote: 引用 11 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

可以了,谢谢!
顺便问一下大神,怎么设立条件才能在fgets读到最后一行空串的时候直接结束,而不读取字符,在中间读到空串的时候我是这样写的if ( szTest[0]=='\n' || szTest[0]=='\r' ) 
{
continue;
},可以跳过那一个空串,但是最后的那个就不行!请教一下大神们


检查fgets返回是否为NULL,如果是,判断是否达到文件尾(feof),如果是表示已经读完可结束

#15


引用 14 楼 paschen 的回复:
Quote: 引用 13 楼 qq_29582387 的回复:

Quote: 引用 12 楼 qq_29582387 的回复:

Quote: 引用 11 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改


fgets(b, sizeof(szTest)+1 , fp);

引用 9 楼 qq_29582387 的回复:
Quote: 引用 8 楼 paschen 的回复:

Quote: 引用 7 楼 qq_29582387 的回复:

Quote: 引用 6 楼 paschen 的回复:

Quote: 引用 1 楼 qq_29582387 的回复:

 int main(int argc, char *argv[]) 

char szTest[1000] = {0};  
    int len = 0;  
float a[N];
char b[1000]={0};
    int n = 0;
 while(!feof(fp))  
    {  

        memset(szTest, 0, sizeof(szTest));  
        fgets(szTest, sizeof(szTest)+1 , fp);

b[n]=szTest[n];
printf("%s", szTest);  

n++;
}
我想用b[n]来保存szTest的内容,但是结果出错了,请问怎么改?


要用二维数组char szTest[10][1000],——可存10个字符串,每个字符串最多1000个字符

具体怎么做?就是上面的代码怎么改?那个b[n]和szTest怎么改



fgets(b[n], sizeof(b[n])+1 , fp);

b[n] 其中b类型为: char b[100][1000]

我原先的那个程序,是可以打印出所有szTest的值的,我以为b[n]=szTest[n]是把szTest的值赋给b,但是发现并没有赋值给b,我想修改的是这个


要用strcpy

好的,我试试

可以了,谢谢!
顺便问一下大神,怎么设立条件才能在fgets读到最后一行空串的时候直接结束,而不读取字符,在中间读到空串的时候我是这样写的if ( szTest[0]=='\n' || szTest[0]=='\r' ) 
{
continue;
},可以跳过那一个空串,但是最后的那个就不行!请教一下大神们


检查fgets返回是否为NULL,如果是,判断是否达到文件尾(feof),如果是表示已经读完可结束

表示具体代码不知道怎么实现,我想照着我原来的代码改,可是一直没改成功,我是初学者 C语言从文件中读取字符串存入到存入字符串数组中

#16


试试看下面这段代码行不行

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;

char *filename = "abc.dat";
vector<string> container;
ifstream ifs(filename);
copy(ifstream_iterator(ifs), ifstream_iterator(), back_inserter<string>(container));

主要思想是利用STL中的istream_iterator