【发布时间】:2020-02-12 15:59:58
【问题描述】:
我想从文件中读取一个名称(例如 config_file.txt,只有一个条目,如 run) 然后用它创建文件名,比如 run0.txt、run1.txt 等等。 但我得到类似 run..0.txt 的东西,带有两个黑点。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXCHAR 1000
void generate(char const *fileName);
int main(int argc, char** argv) {
generate("config_file.txt");
}
void generate(char const *fileName) {
char id[MAXCHAR];
FILE *fp;
char str[MAXCHAR];
fp = fopen(fileName, "r");
if (fp == NULL) {
printf("Could not open file %s", fileName);
return 1;
}
while (fgets(str, MAXCHAR, fp) != NULL) {
strcpy(id, str);
}
fclose(fp);
FILE *filePtr;
char filename[100];
for(int i = 0;i < 8;i++){
sprintf(filename, "%s%d.txt", id,i);
filePtr = fopen(filename, "w");
}
fclose(filePtr);
}
【问题讨论】:
-
您没有删除
fgets()在读取一行后返回的字符串中保留的换行符。您的fclose(filePtr)调用也应该在for循环内。 -
啊,就是这样,你能告诉我如何解决这个问题吗?
-
您刚刚检查过您的输入文件吗?确保它没有
run.我已经运行了你的代码,它按预期工作 -
切换换行符的可靠方法是
str[strcspn(str, "\n")] = '\0';——替代方案必须担心空行和没有换行符等等,但无论如何都有效。如果您认为可能需要处理 CRLF 行结尾,则可以使用"\n\r",但这通常由fopen()为您处理,而不是在打开模式下使用b。 -
谢谢你,解决了问题。
标签: c