我正在使用此代碼加載文件,但它似乎也因爲某種原因刪除換行符,但刪除了第一行。從fread剝離換行符
void load_script(char* path) {
FILE* file;
char* script;
int filesize = 0;
file = fopen(path, "r");
// determine file size
fseek(file, 0L, SEEK_END);
filesize = ftell(file);
fseek(file, 0L, SEEK_SET);
// allocate memory
script = malloc(filesize + 1);
// read script
size_t size = fread(script, 1, filesize, file);
script[size] = 0;
printf("Before stripping:\n%s\n", script);
// strip newlines
script[strcspn(script, "\n")] = 0;
printf("After stripping:\n%s\n", script);
fclose(file);
tokenize(script);
}
下面是輸出:
Before stripping:
line 1
line 2
line 3
After stripping:
line 1
我很想知道,從一個多字符串中去除換行的最佳方式。謝謝。
很好的解釋和修復,但你最後對文件大小類型的評論並不嚴格正確:'ftell()'被定義爲返回'long',而不是'lseek'這樣的'off_t'。類型'long'可能與'size_t'的大小不同,將其轉換爲'int'或'size_t'可能會截斷非常大的文件的值,而這個值甚至可能不是文件大小,所以確實存在問題在那裏。 – chqrlie