我已經在這裏好幾個小時了,我覺得我沒有在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