C 插入到文本文件空白处

C 插入到文本文件空白处,c,C,我要求两个简单的用户输入,一个用户和一个密码,然后将它们插入到一个文本文件中,每个文件后面都有一个分号。分号保存,密码保存,但是用户名由于一些奇怪的原因没有保存 例如,如果我用密码11122244555输入Joe,它将 显示为;111222444555;而不是Joe;111222444555; 代码: 更改scanf(“%s”、&userID)到scanf(“%s”,userID)因为它已经是一个数组,将作为指针传递。密码也一样。 请注意,密码的缓冲区太小:密码是12个字符,缓冲区太小,因此终

我要求两个简单的用户输入,一个用户和一个密码,然后将它们插入到一个文本文件中,每个文件后面都有一个分号。分号保存,密码保存,但是用户名由于一些奇怪的原因没有保存

例如,如果我用密码11122244555输入Joe,它将 显示为
;111222444555;而不是
Joe;111222444555;

代码:

更改
scanf(“%s”、&userID)
scanf(“%s”,userID)因为它已经是一个数组,将作为指针传递。密码也一样。

请注意,密码的缓冲区太小:密码是12个字符,缓冲区太小,因此终止的空字符被放置在缓冲区之外(导致未定义的行为,正如您遇到的)

使用
“%11s”
将读取的长度限制为缓冲区的大小,为终止的空字符留出空间。

更改
scanf(“%s”和&userID)
scanf(“%s”,userID)因为它已经是一个数组,将作为指针传递。密码也一样。

请注意,密码的缓冲区太小:密码是12个字符,缓冲区太小,因此终止的空字符被放置在缓冲区之外(导致未定义的行为,正如您遇到的)


使用
“%11s”
将读取的长度限制为缓冲区的大小,为终止的空字符留出空间。

您应该使用
scanf(“%31s”,userID)读取字符串
用于用户ID和scanf(“%11s”,密码)
我认为导致问题的原因是,您在主函数之后声明并定义了
InsertIntoHash
,而没有在开始时声明原型。 因此,代码应该如下所示:(我测试了它,它工作正常)

#包括
#包括
void InsertIntoHash(char*userID,char*hash);
int main(){
int尝试次数=3;
int结果=0;
字符用户标识[32];
printf(“请输入您的用户id\n”);
scanf(“%31s”,userID);
字符密码[12];
printf(“未找到用户。请输入您的密码\n”);
scanf(“%11s”,密码);
printf(“用户名和密码已保存”);
printf(“\n”);
InsertIntoHash(用户ID、密码);
返回0;
}
void InsertIntoHash(char*userID,char*hash){
文件*fp;
fp=fopen(“HashTable.txt”,“a”);
fprintf(fp,userID);
fprintf(fp,“;”);
fprintf(fp,散列);
fprintf(fp,;\n“);
fclose(fp);
}

我希望我能帮助你!:)

您应该使用
scanf(“%31s”,userID)读取字符串
用于用户ID和scanf(“%11s”,密码)
我认为导致问题的原因是,您在主函数之后声明并定义了
InsertIntoHash
,而没有在开始时声明原型。 因此,代码应该如下所示:(我测试了它,它工作正常)

#包括
#包括
void InsertIntoHash(char*userID,char*hash);
int main(){
int尝试次数=3;
int结果=0;
字符用户标识[32];
printf(“请输入您的用户id\n”);
scanf(“%31s”,userID);
字符密码[12];
printf(“未找到用户。请输入您的密码\n”);
scanf(“%11s”,密码);
printf(“用户名和密码已保存”);
printf(“\n”);
InsertIntoHash(用户ID、密码);
返回0;
}
void InsertIntoHash(char*userID,char*hash){
文件*fp;
fp=fopen(“HashTable.txt”,“a”);
fprintf(fp,userID);
fprintf(fp,“;”);
fprintf(fp,散列);
fprintf(fp,;\n“);
fclose(fp);
}

我希望我能帮助你!:)

为什么不
fprintf(fp,'%s;%s;\n',userId,hash)?可能由于某种原因,您正在将某些CR(回车)写入文件?“Joe;…”的文件有多长?您应该打印这两个变量,以便查看提供给InsertIntoHash的内容。这将帮助您找出问题所在。为什么不
fprintf(fp,%s;%s;\n),userId,hash)?可能由于某种原因,您正在将某些CR(回车)写入文件?“Joe;…”的文件有多长?您应该打印这两个变量,以便查看提供给InsertIntoHash的内容。这将帮助您找出问题所在。从scanf函数中删除和之后,我仍然会得到相同的奇怪结果\@Master,然后共享该奇怪结果。@AmitKumar,它位于原始的post bud中。从scanf函数中删除和之后,我仍然会得到相同的奇怪结果\@Master,然后共享该奇怪结果。@AmitKumar,这是原始的post bud。
int main()
{
    int Number_Of_Attempts = 3;
    int result = 0;
    char userID[32];
    printf("Please enter your user id\n");

    scanf("%s", &userID);

    char password[12];

    printf("The user has not been found. Please enter your a password\n");


    scanf("%s", &password);


    printf("Username and Password has been saved");
    printf("\n");

    InsertIntoHash(userID, password);

    return 0;
}


void InsertIntoHash(char *userID, char *hash)
{
    FILE *fp;
    fp = fopen("HashTable.txt", "a");
    fprintf(fp, userID);
    fprintf(fp,";");
    fprintf(fp, hash);
    fprintf(fp, ";\n");
    fclose(fp);
}
#include <stdio.h>
#include <stdlib.h>

void InsertIntoHash(char *userID, char *hash);

int main() {
    int Number_Of_Attempts = 3;
    int result = 0;
    char userID[32];
    printf("Please enter your user id\n");
    scanf("%31s", userID);
    char password[12];
    printf("The user has not been found. Please enter your a password\n");
    scanf("%11s", password);
    printf("Username and Password has been saved");
    printf("\n");
    InsertIntoHash(userID, password);
    return 0;
}

void InsertIntoHash(char *userID, char *hash) {
    FILE *fp;
    fp = fopen("HashTable.txt", "a");
    fprintf(fp, userID);
    fprintf(fp,";");
    fprintf(fp, hash);
    fprintf(fp, ";\n");
    fclose(fp);
}