【发布时间】:2016-04-25 05:20:45
【问题描述】:
我创建了一个代码来在找到单词“NEW DAY”时拆分文本文件,然后使用特定名称保存文件。
首先,我使用了 File_Part1、File_Part2 等...但是,我想使用正在读取的文件的第二行的前 15 个字符作为保存文件的名称。
例如,第二行写成:TAM 2000-03-07T14:53...我只想使用TAM 2000-03-07 p>
问题是函数 sprintf 对“%d”、“%c”运行良好,但对“%s”不起作用,我不知道为什么。
我之前尝试打印变量以查看 sprintf 应该接收什么,它正在接收我想要的...
代码如下:
int TAM_BUFFER = 75;
int filecounter=1, linecounter=1;
char fileoutputname[16];
int main(int argc, char *argv[]){
char buffer[TAM_BUFFER];
char buffer2[15];
FILE *arquivo = fopen("Entrada.txt", "r");
FILE *saida;
sprintf(fileoutputname, "file_part%d.txt", filecounter);
saida = fopen(fileoutputname, "w");
if(arquivo != NULL){
while(fgets(buffer, TAM_BUFFER, arquivo)){
if(linecounter==2){
strncpy(buffer2,buffer,14);
}
if (strncmp(buffer,"NEWDAY",strlen("NEWDAY")) == 0){
fclose(saida);
linecounter = 1;
filecounter++;
printf("%s", buffer2);
sprintf(fileoutputname,"%s", buffer2);
saida = fopen(fileoutputname, "w");
if (!saida)
return 1;
}
fprintf(saida,"%s\n", buffer);
linecounter++;
}
}
fclose(saida);
return 0;
}
【问题讨论】:
-
当
saida为NULL时添加perror();。这可能会显示一个有趣的错误消息。 -
您还应该在
main()的末尾加上fclose(arquivo)。 (这不能解决您的问题,但您应该始终关闭文件)。 -
你好@jdarthenay,谢谢你的建议,我真的忘了关闭(arquivo)。关于 perror(),好吧,它说“没有错误”。所以我觉得还可以。
-
printf("%s", buffer2);用于调试?你能把它换成printf("strlen(%s)=%d\n", buffer2, (int) strlen(buffer2));吗? -
对不起@jdarthenay 我还没有看到你的评论。结果是 strlen=14
标签: c file text printing split