我已经在这里好几个小时了,我觉得我没有在C中获得一些基本的技术。我一直试图读取一个特定的行,并将其存储到一个文件的2个单独的文件中。源文件(temp)是我正在阅读的文件,2个文件,数据和文本是我试图存储的2个文件。如何将文件的特定内容复制到C中的另一个文件中?
TL; DR,如何将文件中的内容拆分为两个单独的文件?
例如,输入文件是:
.data
A: .word 32
B: .word 16
.text
main:
la $s0 A
lw $s0 0($s0)
la $s1 B
lw $s1 0($s1)
该功能将在临时文件和处理。数据和的.text段为独立的文件。
void process_file(FILE * temp)
{
FILE * data, * text;
char * token;
char * nextLine;
char line[256];
char * str_token = malloc(256 * sizeof(char));
char * str = malloc(256 * sizeof(char));
int i;
data = fopen("data.asm", "w");
text = fopen("text.asm", "w");
if (temp == NULL || data == NULL || text == NULL)
{
printf("UNABLE TO OPEN OR LOCATE FILES. EXITING.\n");
exit(1);
}
while (!feof(temp))
{
if ((nextLine = fgets(line, 256, temp)) != NULL)
{
token = strtok(nextLine, "\n");
//printf("%s", nextLine);
if (token != NULL)
{
strcat(str_token, token);
token = strtok(NULL, "\n");
if ((strstr(str_token, ".data")) != NULL)
{
strcat(str, str_token);
fprintf(data, "%s", str); //ADDING THIS CAUSES A SEG FAULT :(
}
else if ((strstr(token, ".text")) != NULL)
{
fprintf(text, "%s", token);
token = strtok(NULL, "\n");
}
}
}
}
}
谢谢!
它看起来像你继续追加'str'和'str_token'而不需要清除它们。我猜你最终会忘记分配内存的末尾。你只是试图从.data中写出每行,直到你将.text行打到一个文件,其余的打到另一个文件?目前尚不清楚所有strtok的东西是什么。 – 2014-10-29 00:05:09
使用'strlcat()'而不是'strcat()'。这样更安全,并且可以帮助您避免将来出现这样的问题。 – 2014-10-29 00:08:30
您是否遇到了错误或路由输出? – davidc 2014-10-29 00:12:29