user-0 提问: 关于C的文件流操作问题

回复:
user: user-0
content: 问题已经解决，请参考http://blog.csdn.net/jiqiujia/article/details/19943727 无满意回答，分就平均给你们两个吧

user: user-0
content: 我说的是不加上结果才是对的。。。。 引用 2 楼 turingo 的回复:你不fseek的话，那么file指针可能指向的是0，这样取出的字符串相当于是空串。  [quote=引用 楼主 jiqiujia 的回复:] 今天写程序的时候发现了一个很奇怪的问题，在这里提出来，希望有人能解答一下 #include <iostream> #include <fstream> #include <stdio.h> #include <iomanip> using namespace std;  char ch[250]; struct s{ 	short a, b; };  int main(){ 	FILE *file = fopen("test.txt", "wt+"); 	s st; 	st.a = 1, st.b = 2; 	fseek(file, 0, 0); 	fwrite(&st, sizeof(short), sizeof(st) / sizeof(short), file); 	fseek(file, 0, 0); 	fread(&st, sizeof(short), sizeof(st)/sizeof(short), file);  	char temp[256] = "flaf"; 	int c = 3;  	//fseek(file, sizeof(st), 0); 加上这一句结果就不一样了 	fprintf(file, "%-0200s", temp); 	fwrite(&c, sizeof(int), 1, file); 	//fputs(temp, file); 	fseek(file, sizeof(st), 0); 	fgets(temp, sizeof(temp), file); 	fread(&c, sizeof(int), 1, file); 	cout << temp << c<<endl; 	fclose(file); 	system("pause"); 	return 0; } 如果不加上fseek(file, sizeof(st), 0);，那么输出结果是flaf3，但是如果加上以后，字符串就输不出来了，谁能说一下为什么？[/quote]

user: user-1
content: 你不fseek的话，那么file指针可能指向的是0，这样取出的字符串相当于是空串。  引用 楼主 jiqiujia 的回复:今天写程序的时候发现了一个很奇怪的问题，在这里提出来，希望有人能解答一下 #include <iostream> #include <fstream> #include <stdio.h> #include <iomanip> using namespace std;  char ch[250]; struct s{ 	short a, b; };  int main(){ 	FILE *file = fopen("test.txt", "wt+"); 	s st; 	st.a = 1, st.b = 2; 	fseek(file, 0, 0); 	fwrite(&st, sizeof(short), sizeof(st) / sizeof(short), file); 	fseek(file, 0, 0); 	fread(&st, sizeof(short), sizeof(st)/sizeof(short), file);  	char temp[256] = "flaf"; 	int c = 3;  	//fseek(file, sizeof(st), 0); 加上这一句结果就不一样了 	fprintf(file, "%-0200s", temp); 	fwrite(&c, sizeof(int), 1, file); 	//fputs(temp, file); 	fseek(file, sizeof(st), 0); 	fgets(temp, sizeof(temp), file); 	fread(&c, sizeof(int), 1, file); 	cout << temp << c<<endl; 	fclose(file); 	system("pause"); 	return 0; } 如果不加上fseek(file, sizeof(st), 0);，那么输出结果是flaf3，但是如果加上以后，字符串就输不出来了，谁能说一下为什么？

user: user-0
content: 但是问题就是加与不加结果不一样啊 引用 4 楼 turingo 的回复:一回事，加与不加反正file指针所指向是不同的位置。  [quote=引用 3 楼 jiqiujia 的回复:] 我说的是不加上结果才是对的。。。。 [quote=引用 2 楼 turingo 的回复:] 你不fseek的话，那么file指针可能指向的是0，这样取出的字符串相当于是空串。  [quote=引用 楼主 jiqiujia 的回复:] 今天写程序的时候发现了一个很奇怪的问题，在这里提出来，希望有人能解答一下 #include <iostream> #include <fstream> #include <stdio.h> #include <iomanip> using namespace std;  char ch[250]; struct s{ 	short a, b; };  int main(){ 	FILE *file = fopen("test.txt", "wt+"); 	s st; 	st.a = 1, st.b = 2; 	fseek(file, 0, 0); 	fwrite(&st, sizeof(short), sizeof(st) / sizeof(short), file); 	fseek(file, 0, 0); 	fread(&st, sizeof(short), sizeof(st)/sizeof(short), file);  	char temp[256] = "flaf"; 	int c = 3;  	//fseek(file, sizeof(st), 0); 加上这一句结果就不一样了 	fprintf(file, "%-0200s", temp); 	fwrite(&c, sizeof(int), 1, file); 	//fputs(temp, file); 	fseek(file, sizeof(st), 0); 	fgets(temp, sizeof(temp), file); 	fread(&c, sizeof(int), 1, file); 	cout << temp << c<<endl; 	fclose(file); 	system("pause"); 	return 0; } 如果不加上fseek(file, sizeof(st), 0);，那么输出结果是flaf3，但是如果加上以后，字符串就输不出来了，谁能说一下为什么？[/quote][/quote][/quote]

user: user-1
content: 一回事，加与不加反正file指针所指向是不同的位置。  引用 3 楼 jiqiujia 的回复:我说的是不加上结果才是对的。。。。 [quote=引用 2 楼 turingo 的回复:] 你不fseek的话，那么file指针可能指向的是0，这样取出的字符串相当于是空串。  [quote=引用 楼主 jiqiujia 的回复:] 今天写程序的时候发现了一个很奇怪的问题，在这里提出来，希望有人能解答一下 #include <iostream> #include <fstream> #include <stdio.h> #include <iomanip> using namespace std;  char ch[250]; struct s{ 	short a, b; };  int main(){ 	FILE *file = fopen("test.txt", "wt+"); 	s st; 	st.a = 1, st.b = 2; 	fseek(file, 0, 0); 	fwrite(&st, sizeof(short), sizeof(st) / sizeof(short), file); 	fseek(file, 0, 0); 	fread(&st, sizeof(short), sizeof(st)/sizeof(short), file);  	char temp[256] = "flaf"; 	int c = 3;  	//fseek(file, sizeof(st), 0); 加上这一句结果就不一样了 	fprintf(file, "%-0200s", temp); 	fwrite(&c, sizeof(int), 1, file); 	//fputs(temp, file); 	fseek(file, sizeof(st), 0); 	fgets(temp, sizeof(temp), file); 	fread(&c, sizeof(int), 1, file); 	cout << temp << c<<endl; 	fclose(file); 	system("pause"); 	return 0; } 如果不加上fseek(file, sizeof(st), 0);，那么输出结果是flaf3，但是如果加上以后，字符串就输不出来了，谁能说一下为什么？[/quote][/quote]

user: user-2
content: 无fopen(...,"...b")不用fseek！