user-0 提问: C 实现输入字符串，存储到文件里面，然后打印出来

回复:
user: user-1
content: 引用 9 楼 xdhyqd 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] #pragma warning(disable:4996) ... 除非专门说明，本ID一律使用VC6和VB6 赵老师，请问关于这个内存的分配呢？怎么分配到最优呢[/quote] 我的代码已经是分配到最优了。只是你没看出来而已。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:#pragma warning(disable:4996) ... 除非专门说明，本ID一律使用VC6和VB6 赵老师，请问关于这个内存的分配呢？怎么分配到最优呢

user: user-2
content: scanf  就是回车做结束符的， 把里面的内容（字符串）保存下来就行。 char buf[256]; scanf(“%s",buf);

user: user-1
content: #pragma warning(disable:4996) ... 除非专门说明，本ID一律使用VC6和VB6

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char ln[MAXLEN]; FILE *f; int i,z; int b,n,L; int main(int argc,char **argv) {     if (argc<2) {         printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);         return 1;     }     f=fopen(argv[1],"r");     if (NULL==f) {         printf("Can not open file [%s]!\n",argv[1]);         return 2;     }     z=0;     b=0;     n=0;     L=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         L=strlen(ln);         if ('\n'==ln[L-1]) {             if (0==z) {                 for (i=0;i<L-1;i++) {                     if (!(' '==ln[i] || '\t'==ln[i])) break;                 }                 if (i<L-1) z=1;//当前行不是空行             }             if (0==z) b++; else n++;             z=0;         } else {             if (0==z) {                 for (i=0;i<L;i++) {                     if (!(' '==ln[i] || '\t'==ln[i])) break;                 }                 if (i<L) z=1;//当前行不是空行             }         }     }     fclose(f);     if (L>0 && '\n'!=ln[L-1]) {         if (0==z) b++; else n++;//最后一行末尾无'\n'也计算     }     printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n);     return 0; }  This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.。 赵老师，你用的是什么版本呢

user: user-0
content: 各位有误解哈，假如我要读入一个流，但是怎么分配内存才是最优的呢？试过一个一个读，然后在remalloc，感觉有点笨笨的，可有什么好想法

user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char ln[MAXLEN]; FILE *f; int i,z; int b,n,L; int main(int argc,char **argv) {     if (argc<2) {         printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);         return 1;     }     f=fopen(argv[1],"r");     if (NULL==f) {         printf("Can not open file [%s]!\n",argv[1]);         return 2;     }     z=0;     b=0;     n=0;     L=0;     while (1) {         if (NULL==fgets(ln,MAXLEN,f)) break;         L=strlen(ln);         if ('\n'==ln[L-1]) {             if (0==z) {                 for (i=0;i<L-1;i++) {                     if (!(' '==ln[i] || '\t'==ln[i])) break;                 }                 if (i<L-1) z=1;//当前行不是空行             }             if (0==z) b++; else n++;             z=0;         } else {             if (0==z) {                 for (i=0;i<L;i++) {                     if (!(' '==ln[i] || '\t'==ln[i])) break;                 }                 if (i<L) z=1;//当前行不是空行             }         }     }     fclose(f);     if (L>0 && '\n'!=ln[L-1]) {         if (0==z) b++; else n++;//最后一行末尾无'\n'也计算     }     printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n);     return 0; }

user: user-3
content: 那你就用getchar(), 一个一个的读,如果超过之前malloc的长度就realloc. 还可以用setvbuf控制.

user: user-4
content: 循环读取字符 /**************************************  *FILE    :D:\c\main.c  *PROJECT :NULL  *AUTHOR  :707wk  *CREATED :2015/7/10 13:33:43  *TEXT    :NULL  *EMAIL   :gtsoft_wk@foxmail.com  *CODE    :https://github.com/707wk  *LOGO    :                #########                                      ############                                    #############                                  ##  ###########                                ###  ###### #####                               ### #######   ####                             ###  ########## ####                           ####  ########### ####                        #####   ###########  #####                     ######   ### ########   #####                   #####   ###   ########   ######                ######   ###  ###########   ######             ######   #### ##############  ######           #######  ##################### #######          #######  ##############################        #######  ###### ################# #######       #######  ###### ###### #########   ######       #######    ##  ######   ######     ######       #######        ######    #####     #####         ######        #####     #####     ####           #####        ####      #####     ###             #####      ;###        ###      #                 ##       ####        ####                ***************************************/  #include <stdio.h>  int main() { 	char ch; 	FILE* fpout; 	FILE* fpin;  	fpout=fopen("data.txt","w"); 	for(;ch=getchar();) 	{ 		if(ch=='\n')break; 		fputc(ch,fpout); 	} 	fclose(fpout);  	fpin=fopen("data.txt","rb"); 	for(;!feof(fpin);) 	{ 		printf("%c",fgetc(fpin)); 	} 	fclose(fpin); 	 	return 0; }

user: user-5
content: 是要确切的知道一共录入了多少个字符吗？如果是就把字符串读出来，直到读到\0，记录读取次数