1)
對於fgets()函數
在打開一個文件時,用fgets函數去讀取文件的每一行,fgets()函數會系統默認從上次讀取的位置開始讀取,也可以設置它的指針偏移量來控制每次要讀取的哪一行。一般對於要讀取一個文件的制定行可以通過判斷要讀取的字符串,就可以讀取到你要取的那一行。
示例代碼如下:
#include
#include
#include
int main()
{
FILE *fp;
fp = fopen ("/mnt/hgfs/Linux/dict/dict.txt","r");
while(fgets(RED_buf,MAXLEN_DATA,fp) != NULL){
if (strncmp(RED_buf,pXP->data,strlen(pXP->data)) == 0){
memset (buffer,0x00,sizeof(struct XProtocol));
pXP = (struct XProtocol *)buffer;
strcpy((char *)pXP->data,RED_buf);
write(connfd,buffer,sizeof(struct XProtocol));
}
}
return 0
}
【2】第二種情況當你把buff的大小改爲8的時候就可以存放kano的字符串了,你也看到會打印出來兩個kano的字符,
可是你會發現沒有打印出you can see this sentence 這句話。
對於這是因爲strcmp比較兩個字符串數組的時候會要求兩個字符串完全相同纔可以,
對於在定義的時候testbuff中就已經確定字符串的數組會在後面系統默認添加'\0'空字符,
這樣表面看來打印在屏幕是兩個相同的kano,可是是有很大區別的,只要你仔細看 ,也會發現對於puts函數的輸出時會有個換行符造成的空格。這就是fgets函數在標準輸入到buff中的所導致的原因。從而導致兩個KANO看着相同,卻沒有打印判斷條件裏面的一句話。
【3】對於這種情況,我們在標準輸入之後,再在buf後面把系統添加的'\n'換成''\0'這樣兩個字符串數組就一樣了,就這樣打印出判斷條件裏面的一句話了。
【4】對於strcnmp函數,又會發現一種特殊情況,當我輸入kano hello這句話是,也會打印中間的一句話,這是因爲strcmp和strcnmp函數的卻別,就是strcnmp中間n的含義,表示只比較字符串數組有相同的4個字符一樣就導致條件成立,就會打印出中間的一句話。不要求和strcmp函數必須要兩個字符串數組完全相同纔可以,你也會發現【1】第一種情況,這裏只打印了 kano he 六個字符和一個空字符(空格)。