亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2326 | 回復(fù): 8
打印 上一主題 下一主題

打印代碼疑惑, 求高手解答 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-03-26 21:31 |只看該作者 |倒序瀏覽
本帖最后由 mgqw 于 2012-03-27 13:49 編輯

我這段代碼就所用fgets函數(shù)依次從html文件以行為單位讀取數(shù)據(jù), 讀取到版本字符串后在對其操作。
  1.             if( '\n' == acBuf[strlen(acBuf)-1] )
  2.             {
  3.                 acBuf[strlen(acBuf)-1] = '\0';
  4.             }
復(fù)制代碼
在進(jìn)行上面這段代碼去掉字符串末尾的換行符后, 再打印字符串, 各種妖魔鬼怪的輸出出現(xiàn)了,   
比如58行下面一行的打印只打印字符串沒有問題
而60行的打印文件名strcheck.c變成了###check.c
第62行的打印更是“    <td width=60%><”這一段都沒有了。。。。
為什么只打印字符串本身沒有問題, 而添加了其他的東東打印就亂七八糟了?  是我的代碼有問題嗎百思不得其解

$ ./a.out
READ THE SOFTWARE'S VERSION OPERATE
strcheck.c:46 ----------------42------------------
strcheck.c:58 ----------------41------------------
    <td width=60%><font size=2>123456789
###check.c:60 ###    <td width=60%><font size=2>123456789
------------------font size=2>123456789
strcheck.c:63 ----------------41------------------



詳細(xì)代碼如下:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include <sys/socket.h>
  8. #include <fcntl.h>
  9. #include <poll.h>
  10. #include <ctype.h>



  11. #define MAX_NODE_LENGTH 256



  12. void PTI_GetSoftVersion(  char *pcVersion, int iLen )
  13. {
  14.     FILE *fp= NULL;
  15.     char  acBuf[MAX_NODE_LENGTH]    = {0};
  16.     char *pcStr  = NULL;

  17.     if( NULL == pcVersion )
  18.     {
  19.         printf("error : illegal parament \n\r");
  20.         return;
  21.     }
  22.     memset( pcVersion, 0, iLen );

  23.     printf("READ THE SOFTWARE'S VERSION OPERATE \n\r");
  24.     if((fp = fopen("./test_version.html","r")) == NULL)
  25.     {
  26.         printf("Fail to open test_version html file\r\n" );
  27.         return;
  28.     }

  29.     /* 依次讀取version個文件每行進(jìn)行判斷 */
  30.     while( fgets(acBuf, MAX_NODE_LENGTH, fp) )
  31.     {
  32.         /* 當(dāng)前行包含"Software Version:"則下一行就是版本信息,*/
  33.         if( strstr(acBuf, "Software Version:") )
  34.         {
  35.             memset(acBuf, 0, sizeof(acBuf));
  36.             fgets(acBuf, MAX_NODE_LENGTH, fp);
  37.             printf( "%s:%d ----------------%d------------------\n", __FILE__, __LINE__, strlen(acBuf)  );  
  38.             /* 去掉字符串末尾的換行符 */
  39.             if( '\n' == acBuf[strlen(acBuf)-1] )
  40.             {
  41.                 acBuf[strlen(acBuf)-1] = '\0';
  42.             }
  43.             break;
  44.         }
  45.         memset(acBuf, 0, sizeof(acBuf));
  46.     }

  47.     //strcpy(acBuf, "<td width=60%><font size=2>GPN2.4P21-C-TBS19549</td>");
  48.     printf( "%s:%d ----------------%d------------------\n", __FILE__, __LINE__, strlen(acBuf)  );  
  49.     printf( "%s\n", acBuf );  
  50.     printf( "%s:%d ###%s###\n", __FILE__, __LINE__, acBuf );  
  51.     //printf( "%s ----------%s:%d--------\n", acBuf, __FILE__, __LINE__ );  
  52.     printf( "%s ------------------\n", acBuf );  
  53.     printf( "%s:%d ----------------%d------------------\n", __FILE__, __LINE__, strlen(acBuf)  );  
  54.     /* 截取版本字符 */
  55.     sscanf(acBuf,"%*[^>]>%*[^>]>%250s", pcVersion );
  56.     /* 如果后面還有html括號,用字符串結(jié)束符截斷 */
  57.     pcStr = strchr(pcVersion, '<');
  58.     if( pcStr != NULL )
  59.     {
  60.         *pcStr = '\0';
  61.     }
  62.     //printf( "%s:%d ###%s###\n\n", __FILE__, __LINE__, pcVersion );  
  63.     fclose(fp);

  64.     return;
  65. }




  66. main()
  67. {
  68.     char  acVersion[MAX_NODE_LENGTH] = {0};

  69.     PTI_GetSoftVersion( acVersion, MAX_NODE_LENGTH-1 );
  70.     printf("%s, %s, %s", acVersion, __DATE__, __TIME__);  

  71.     return;
  72. }
復(fù)制代碼
數(shù)據(jù)文件內(nèi)容如下:
  1. $ cat test_version.html
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>version</title>

  6. </head>
  7. <BODY>
  8. <table width=450 border=2">
  9.   <tr >
  10.     <td width=40%><font size=2><b>Software Version:</b></td>
  11.     <td width=60%><font size=2>123456789
  12. </td>
  13.   </tr>
  14. </table>

  15. </body>
  16. </html>
復(fù)制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2012-03-27 09:35 |只看該作者
用了幾個版本的linux都是這樣的問題, 頂頂高手來解惑........

論壇徽章:
0
3 [報告]
發(fā)表于 2012-03-27 11:22 |只看該作者
再頂頂,  等高手

論壇徽章:
0
4 [報告]
發(fā)表于 2012-03-27 11:25 |只看該作者
本帖最后由 x5miao 于 2012-03-27 11:26 編輯

回復(fù) 3# mgqw


    先把垃圾注釋去掉和把代碼改正確再說

論壇徽章:
0
5 [報告]
發(fā)表于 2012-03-27 11:43 |只看該作者
回復(fù) 4# x5miao

都說了, 只要屏蔽掉下面這段代碼就沒有問題
            /* 去掉字符串末尾的換行符 */
            if( '\n' == acBuf[strlen(acBuf)-1] )
            {   
                acBuf[strlen(acBuf)-1] = '\0';
            }
   

論壇徽章:
0
6 [報告]
發(fā)表于 2012-03-27 13:31 |只看該作者
回復(fù) 5# mgqw


你的程序編譯無法通過。WTF

論壇徽章:
0
7 [報告]
發(fā)表于 2012-03-27 13:50 |只看該作者
回復(fù) 6# x5miao


    復(fù)制代碼的時候不知道怎么回事多復(fù)制了一個大括號,  已經(jīng)改過來了, 不好意思.

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
8 [報告]
發(fā)表于 2012-03-27 14:10 |只看該作者
我試了都正常。
我覺得似乎是你的終端設(shè)置問題,\n沒起作用,你上一行的輸出被下一行覆蓋了

論壇徽章:
0
9 [報告]
發(fā)表于 2012-03-27 14:56 |只看該作者
回復(fù) 8# hellioncu


    我換了三種環(huán)境都是這樣的輸出, 有el5, fedora16嵌入式上面都跑了,  這就奇怪了.....
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP