[英]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.