簡體   English   中英

無法將文本文件中的行讀入字符串

[英]Unable to read line from text file into string

我有一個看起來像這樣的文本文件

user1 |密碼1
user2 |密碼2

我有一個字符串,說“ user1 | password1”。 我需要將文本文件的每一行與此字符串進行比較。

    FILE *fp;
    fp = fopen("user_info_file.txt", "r");
    while(fgets(str, 10, fp)!=NULL){
    n = write(newsockfd, "STR:", 4);
    n = write(newsockfd, str, 15);}

然后繼續進行strcmp。 我使用寫功能,因為我正在服務器上將其寫到客戶端。

我只是將15作為隨機值(在范圍內)以查看是否正在讀取任何文本。 但是,當它顯示str時,str不會包含任何內容。 它只是打印為“ STR:”,然后在下一行返回提示。

請告訴我如何將user_info_file.txt中的數據(至少第一行)讀入str。 我已經花了幾個小時,但是我似乎還是不明白。 新手在這里,請多多包涵。

編輯:基本上我正在創建一個IM應用程序。 用戶通過輸入其用戶名和密碼進行注冊,該用戶名和密碼將被發送到服務器,服務器將其以我上面編寫的形式存儲在user_info_file中。 用戶注冊后,他們需要能夠登錄。 他們輸入用戶名和密碼,然后我再次將其發送到服務器。 然后,我需要服務器將此字符串與user_info_file中的現有條目進行比較,以驗證登錄名。 因此,我需要服務器檢查user_info_file的每一行並將其與用戶輸入的內容進行比較。

所以我有

char* str = new char[256];
    FILE *fp;
    fp = fopen("user_info_file.txt", "r");
    while(fgets(str, 10, fp)!=NULL){
    n = write(newsockfd, "STR:", 4);
    n = write(newsockfd, str, 15);}
    if(strcmp(buffer, str) == 0)
        n = write(newsockfd, "Logged in", 9);
    else
        n = write(newsockfd, "No such username", 16);

基本上,我試圖將user_info_file的每一行讀入str。 然后,我將每條讀取行后的str與緩沖區進行比較。 緩沖區存儲客戶端已發送的登錄信息。 如果匹配,則登錄應該成功。

但是,當我編寫str時,它什么也不會打印。 15應該寫的str中的字符數對嗎? 因此,即使數字為5,它也應至少打印“ user1”或“ user2”或user_info_file的SOME行的前5個字符。 但這看起來根本沒有東西從文件讀入str。

我希望我已經說清楚了。 我能做什么? 我機智的盡頭。

我認為使用fgets函數逐字符讀取文件char並不方便。 我建議您使用fscanf ,它為您提供了更多機會 :就像同時讀取不同格式的值一樣。 在這里,我得到了一些代碼片段,以演示如何使用fscanf從文件中獲取所需的信息:

int main(void)
{
    char str[256];
    char checkLogin[256];
    char checkPassword[256];
    FILE *fp = fopen("user_info_file.txt", "r");
    /*while(fgets(str, 10, fp)!=NULL){
    n = write(newsockfd, "STR:", 4);
    n = write(newsockfd, str, 15);}*/
    int scanSucceed = 1;
    do
    {
        scanSucceed = fscanf(fp,"%s|%s ", checkLogin, checkPassword); 
        if (!strcmp(checkLogin, buffer))
        {
        // in case if password for that login match
            if (!strcmp(checkPassword, password))
            {
                ValidLogin = true;
                scanSucceed = -1; // exit from while loop
            }
        }
    }
    while(scanSucceed != -1); // while string was read
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM