不同我寫了下面的函數讀取文件的內存內容。 它在我的本地機器(Ubuntu 32bit)上運行良好,但在服務器(CentOS 64bit)上產生錯誤的結果。閱讀文件存儲器的內容,導致32位操作系統和64位操作系統
錯誤的情況下: 有了一個40字節的文件,內容是下面的64位操作系統,它給了我錯誤的結果。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
代碼:
char* file_get_contents(const char *filename) {
FILE *stream = NULL;
char *content = NULL;
size_t ret;
struct stat st;
if ((stream = fopen(filename,"r")) == NULL) {
fprintf(stderr, "Failed to open file %s\n", filename);
exit(1002);
}
if(stat(filename, &st) < 0) {
fprintf(stderr, "Failed to stat file %s\n", filename);
exit(1002);
}
content = malloc(st.st_size);
ret = fread(content, 1, st.st_size, stream);
if (ret != st.st_size) {
fprintf(stderr, "Failed to read file %s\n", filename);
exit(1002);
}
fclose(stream);
return content;
}
什麼是錯的輸出?用'\ 0''終止了「內容」嗎? – Rohan 2012-08-16 09:35:55
@Rohan是的,錯誤的結果不會被終止。但爲什麼它在32位操作系統中運行良好? – xdazz 2012-08-16 09:38:05
@xdazz大多運氣,也許正好是在一塊的malloc()給你之後,存儲一個零字節,而內存包含您的其他平臺上的其他東西。 – nos 2012-08-16 09:39:40