如何将字符串的每一行保存到C中的新字符串中?

如何将字符串的每一行保存到C中的新字符串中?,c,string,pointers,C,String,Pointers,我正在读取数据文件,它看起来像这样 ie=1 is=5 我已经导入了该文件并将其内容保存到输入变量中,该变量是一个字符串 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ FILE *fileP = fopen("test.txt", "r"); int line = 0; char input[10]; if (fi

我正在读取数据文件,它看起来像这样

ie=1
is=5
我已经导入了该文件并将其内容保存到输入变量中,该变量是一个字符串

    #include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){

    FILE *fileP = fopen("test.txt", "r");
    int line = 0;
    char input[10];  

    if (fileP == NULL){
       perror("ERROR");
    }

    while (fgets(input,10,fileP)){
        line++;

    printf("%s",input);
    }
    // input has ie=1 and is=5.
    // Seperate the two lines

    //int length = 3;
      //  printf("\n%*.*s", length, length, "is=1");

    //char *isString = strtok(input, ' ');
       // printf("%s\n", isString);

    //char *myStr1 = isString;
    //int is = atoi(&myStr1[3]);
       // printf("%i\n", is);

    char *ieString = strtok(input, " ");
    //printf("%s\n", ieString);

    char *myStr2 = ieString;
    int ie = atoi(&myStr2[3]);
    printf("\n%i", ie);

    fclose(fileP);
    return 0;

}
#包括
#包括
#包括
int main(){
FILE*fileP=fopen(“test.txt”、“r”);
内线=0;
字符输入[10];
if(fileP==NULL){
佩罗(“错误”);
}
while(fgets(输入,10,文件)){
line++;
printf(“%s”,输入);
}
//输入的ie=1,is=5。
//把这两行分开
//整数长度=3;
//printf(“\n%*.*s”,长度,长度,“is=1”);
//char*isString=strtok(输入“”);
//printf(“%s\n”,isString);
//char*myStr1=isString;
//int is=atoi(&myStr1[3]);
//printf(“%i\n”是);
char*ieString=strtok(输入“”);
//printf(“%s\n”,iString);
char*myStr2=ieString;
int ie=atoi(&myStr2[3]);
printf(“\n%i”,即);
fclose(fileP);
返回0;
}
如何分隔这两行并将其保存在不同的字符串中?
目前,我在从数据中提取第一行时遇到问题。

我知道,对于每一行,应该提取键和相应的值

在结构中表示键值对是有意义的

在一个循环中可以填充此结构,在另一个循环中可以输出值

如果有人接受您的代码并对其进行相应调整,它可能会如下所示:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_KEY 5
#define MAX_LINES 5
#define MAX_INPUT 10

struct key_value {
    char key[MAX_KEY];
    int value;
};

int main() {

    FILE *fileP = fopen("test.txt", "r");
    char input[MAX_INPUT];
    struct key_value dict[MAX_LINES];

    if (fileP == NULL) {
        perror("ERROR");
        exit(1);
    }

    int line = 0;
    while (fgets(input, MAX_INPUT, fileP)) {
        char *delimiter = strchr(input, '=');
        if(delimiter) {
            snprintf(dict[line].key, delimiter - input + 1, "%s", input);
            dict[line].key[delimiter - input] = '\0';
            dict[line].value = atoi(delimiter + 1);
        } else {
            fprintf(stderr, "delimiter = not found in line %d\n", line);
            exit(1);
        }
        if(line == MAX_LINES) {
            fprintf(stderr, "too many input lines");
            exit(1);
        }
        line++;
    }
    fclose(fileP);

    for(int i = 0; i < line; i++) {
        printf("key:%s value:%d\n", dict[i].key, dict[i].value);
    }

    return 0;
}
key:ie value:1
key:is value:5
更强健的解决方案

值得一提的是,atoi不报告任何转换错误

因此
man atoi
建议:

建议使用strtol()和strtol_l()函数代替atoi()和atoi_l()函数,尤其是在新代码中


请阅读并提供MVCE。请提供您尝试的更多详细信息。StackOverflow用于回答有关修复编程时遇到的编程问题的问题。这个问题广泛地要求帮助实现一个编程目标——如果不是让其他人实现这个目标的话。请理解这些事情是不一样的。如果你展示你描述的代码,可能就足够从可用的库中得到指出合适函数的答案了。