【发布时间】:2015-11-07 22:11:27
【问题描述】:
我有这个代码:
void text(){
FILE *fp;
fp = fopen( "Text.txt", "w" );
if (fp == NULL)printf("not open\n");
char txt[100];
char c;
while(1){
char c = getche();
if (c == '\e')
break;
txt[0] = c;
gets(txt+1);
fprintf(fp, "%s ",txt);
}
fclose(fp);
}
它工作正常,输出如下:Hello there.
void text(){
char fname[20] ;
puts("Write file name");
scanf("%s",&fname); //input of the file name
char ext[5] = ".txt";
char fileSpec[strlen(fname)+strlen(ext)+1]; //file name assambly
snprintf( fileSpec, sizeof( fileSpec ), "%s%s", fname, ext);
FILE *fp;
fp = fopen( fileSpec, "w" );
if (fp == NULL)printf("not open\n");
char txt[100];
char c;
while(1){
char c = getche();
if (c == '\e')
break;
txt[0] = c;
gets(txt+1);
fprintf(fp, "%s ",txt);
}
fclose(fp);
}
我从一个网站上获取了上半部分,分别对其进行了测试,它确实有效。下半部分是相同的,当我将两者放在一起时,输出将是这样的:H ello there.
为什么会有那个空间?
【问题讨论】:
-
无法回答。
getche()不是标准 C 函数,'\e'不是有效的转义码。您正在使用非标准(供应商特定)功能,它们之间的交互取决于与供应商如何做事相关的太多事情。 -
永远不要使用
gets()。它本质上是不安全的,已从语言中删除。fgets()可以安全地使用,尽管它需要更多的努力(它会在目标数组中留下尾随的'\n',如果有的话)。