[C] fgets 的眉角 : 換行字元 / 空白處裡
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); }
1,697 Views