今天寫程式時卡位了,最主要是沒弄清楚sizeof()與strlen()的使用時機,後來問了jashliao,點通了我這小嫩咖,所以稍加記錄
而今天的主要情形是我使用C開檔,並寫入一段文字,儲存後離開,但去開檔看文字有寫入但後面多了一些亂碼,像是^@
程式碼如下
#include <stdio.h> #include <string.h> int main(){ char sbuf[512]; FILE *pFile; sprintf(sbuf, "%s%s%s", "aaa", "aaa", "aaa"); pFile = fopen("filename.txt","w" ); if( NULL == pFile ){ printf( "open failure" ); return 1; }else{ fwrite(sbuf,1,sizeof(sbuf),pFile); fclose(pFile); } return 0; }
而開啟檔案裡的內容會像下面,前面九個a是正確的,但後面多了很多的亂碼
aaaaaaaaa#▒`=▒0▒#▒▒=▒ ▒#▒▒n .N=▒▒▒* x ▒▒#▒(▒▒▒▒#▒▒▒▒8▒▒▒▒#▒▒+ ▒* ▒▒* ▒@x▒▒@X▒#▒0▒#▒▒* + ▒+ ▒y ▒* ▒+ + ▒▒#▒▒▒#▒.N=▒▒@▒▒▒▒▒▒#▒▒▒▒▒▒* ▒+ ▒@▒#▒r
最後是把sizeof(sbuf)改成strlen(sbuf),輸出就正常了
修改後的程式碼如下
#include <stdio.h> #include <string.h> int main(){ char sbuf[512]; FILE *pFile; int len; sprintf(sbuf, "%s%s%s", "aaa", "aaa", "aaa"); len=strlen(sbuf); printf("%d",len); pFile = fopen("filename.txt","w" ); if( NULL == pFile ){ printf( "open failure" ); return 1; }else{ fwrite(sbuf,1,strlen(sbuf),pFile); fclose(pFile); } return 0; }
其中還加了len=strlen(sbuf)再把len印出來printf("%d",len),確定strlen(sbuf)是9
結論是如果使用sizeof()因為程式不知道你要在那裡停,所以它就整個buffer把它印出來
如果你是使用strlen(),那麼長度在本例就是9,所以它只印9個字,後面那些拉裡拉雜的就不會來湊熱鬧了.
文章標籤
全站熱搜
留言列表