WhereIsWelly ?

Thinking and life

fgets 是個方便的小api
他可以讓你簡單的”一行一行” 去讀取一個檔案。

也就是呼叫一次,是去檔案中讀取一行字

這次遇到的問題則是你以為抓下來的是空白。
在實際的比對上似乎也是”(空無一物)” 但是實際上是有一個”\n”(換行字元)
fgets的特色就是會抓到換行字元,似乎是一個小小的side effect。
不過可以有這東西用就該感恩了(笑)

所以如果你知道這個特性,想要去除掉這個算是多抓到的換行字元的話。
應該是用以下的方式。

fgets(product_name,sizeof(product_name),fp_tmp);
if(product_name[strlen(product_name) - 1] == '\n')
    product_name[strlen(product_name) - 1] = '\0';

將最後一個字元”\n” 換成 “\0”
比較有趣的是可以直接這樣操作一個陣列喔@_@
把陣列分開成很多char 可以選擇其中的一個位置,然後用”=”直接賦值。
其實是有點有趣的,必須要被記錄一下。

整個的fgets用法大概是如此

FILE *fp_tmp;
char product_name[100];

if( (fp_tmp = fopen("/tmp/somfile","r"))!=NULL){
   fgets(product_name,sizeof(product_name),fp_tmp);
   if (product_name[strlen(product_name) - 1] == '\n')
      product_name[strlen(product_name) - 1] = '\0';
   //千萬不要忘記關檔... 關檔時機很重要,因為你沒關會錯。沒開就關也會有memory錯誤。
   fclose (fp_tmp);
}

Leave a Reply