如何将字符串的每一行保存到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用于回答有关修复编程时遇到的编程问题的问题。这个问题广泛地要求帮助实现一个编程目标——如果不是让其他人实现这个目标的话。请理解这些事情是不一样的。如果你展示你描述的代码,可能就足够从可用的库中得到指出合适函数的答案了。