fprintf输出')'在txt文件中

时间:2015-06-13 11:31:42

标签: c printf

我一直在尝试创建一个c程序来打印.txt文件的当前内容,允许用户输入他们希望在那里的内容,然后在之前的txt文件上打印该内容。但是,生成的.txt文件打印了')',替换了打印的字符。

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    FILE *fileDisplay = fopen("password1.txt", "r" );
    char c;

    printf("Current Password is: ");

    do{

    c = fgetc(fileDisplay);
    printf("%c", c);

    }

    while (c != EOF);
    fclose(fileDisplay);

    char np[]="";

    printf("\nPlease Enter New Password: \n");
    scanf(" %s", np);

    FILE *file = fopen("password1.txt", "w" );
    fprintf(file," %s", np);
    fclose(file);
    return 0;
}

例如,如果用户输入

  

密码

作为字符npfprintf的输出是

  

P&#39)&#39; uord

3 个答案:

答案 0 :(得分:1)

np中没有足够的内存来存储用户输入的字符串(密码)。

更改

char np[]=""; /* Here np can atmost hold only 1 character, which now is '\0' */

char np[10]=""; /* here 10 is arbitrary, change to the max value of the string length that can be expected from the user */

答案 1 :(得分:1)

char np[] = "";

相当于:

char np[1] = {'\0'};

创建一个1元的char数组,不足以存储除空字符串以外的任何字符串。

答案 2 :(得分:1)

数组np只有一个字符的空间(用它初始化的空字符串'\0'的终止""),因为你没有指定它的大小。因此,它不能适应除空字符串以外的任何字符串以及用户输入的其余部分溢出,从而导致未定义的行为。

您需要提供足够大的数组来保存用户的输入(指定[]之间的大小),您还应该通知输入函数(此处为scanf,但{这个大小的{1}}可能更好),以便它知道不要写过数组的末尾。