我有這個只有數字的檔案:
0 1 2 3 4 5
5 6 7 8 9 10
我已經使這個函式寫入檔案:
void change(char* file) {
int count = 0;
FILE* arquive = fopen (file,"a ");
char line[256];
memset(line,0,strlen(line));
char auxLine[256];
memset(auxLine,0,strlen(auxLine));
while (fgets(line, sizeof(line), arquive) != NULL) {
if (count == 1) {
memset(auxLine,0,strlen(auxLine));
strncpy(auxLine, line, sizeof line);
fprintf(arquive, "%s", auxLine);
} else {
count ;
}
}
}
檔案上的輸出:
5 6 7 8 9 105 6 7 8 9 10
10
2 10
2 10
9 9 16 16 NULL NULL NULL NULL
但是每當我嘗試使用 fprintf 將字串附加到檔案時,它都會列印出很多垃圾。我試過使用 memset 來清理里面的東西,但沒有成功。
謝謝你的幫助!
uj5u.com熱心網友回復:
fopen(..., "a ") -- 以讀寫方式打開。流位于檔案的末尾。因此,永遠不會進入您的 while 回圈。
副本和記憶體集是沒有意義的,下面的代碼是等價的:
void change(char* file) {
int count = 0;
FILE* arquive = fopen (file,"a ");
char line[256];
while (fgets(line, sizeof(line), arquive) != NULL) {
if (count == 1) {
fputs(line, arquive);
} else {
count ;
}
}
}
- 下面的版本可能更接近你想要的:
void change(char* file) {
int count = 0;
FILE* arquive = fopen (file,"a ");
FILE *src = fopen(file, "r");
char line[256];
while (fgets(line, sizeof(line), src) != NULL) {
if (count == 1) {
fputs(line, arquive);
} else {
count ;
}
}
fclose(src);
fclose(arquive);
}
- 您可能正在玩火讀取和寫入您要附加的檔案。但它似乎至少適用于小檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325092.html
