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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2526 | 回復(fù): 0
打印 上一主題 下一主題

[C] 幫忙看看這個(gè)iconv的例子 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-04-02 23:29 |只看該作者 |倒序?yàn)g覽
本帖最后由 ztkx 于 2011-04-02 23:41 編輯

需要用到libiconv作轉(zhuǎn)換,從一個(gè)文件轉(zhuǎn)換到另一個(gè)文件,但是我試了一下,總是在若干行之后,拋出 SIGSEGV信號(hào),


  1. #include        <stdio.h>
  2. #include        <string.h>
  3. #include        <ctype.h>
  4. #include        <stdlib.h>

  5. #include        <iconv.h>

  6. #define        BUF_SIZE 1024                        //


  7. /* iconv 的封裝 */
  8. size_t recode ( char **in_buf, size_t *in_len, char **out_buf, size_t *out_len );

  9.         int
  10. main ( int argc, char *argv[] )
  11. {
  12.         FILE *fp;
  13.         size_t i = 0;
  14.         size_t lines = 0;
  15.         size_t rc = 0;
  16.         char in_buf[BUF_SIZE] = {'\0'};
  17.         char out_buf[BUF_SIZE] = {'\0'};

  18.         size_t in_len = 0;
  19.         size_t out_len = BUF_SIZE;

  20.         char *pin = (char *) in_buf;
  21.         char *pout = (char *)out_buf;
  22.         char *src_file;

  23.         if ( argc != 2 ) {
  24.                 printf ( "Usage: %s txt_file\n", argv[0] );
  25.                 return EXIT_FAILURE;
  26.         }
  27.         src_file = argv[1];

  28.         fp = fopen(src_file, "r");

  29. /* 按行讀取文件內(nèi)容,進(jìn)行編碼轉(zhuǎn)換 */
  30.         while ( NULL != fgets(pin, BUF_SIZE, fp) ) {
  31.                 /*printf ( "pin is %s\n", pin );*/
  32.                 in_len = strlen(pin);

  33.                 rc = recode(&pin, &in_len, &pout, &out_len);

  34.                 if ( 0 == rc ) {
  35.                         printf ( "out is %s\n", out_buf);
  36.                 }

  37.                 pout = (char *)out_buf;
  38.                 printf ( "lines %d\n", ++lines );   
  39.         }

  40.         fclose(fp);

  41.         return EXIT_SUCCESS;
  42. }                                // ----------  end of function main  ----------


  43.         size_t
  44. recode ( char **in_buf, size_t *in_len, char **out_buf, size_t *out_len )
  45. {
  46.         size_t rc = 0;
  47.         iconv_t __iconv;

  48.         __iconv = iconv_open("GBK", "UTF-8");

  49.         if ( (iconv_t)-1 == __iconv ) {
  50.                 return EXIT_FAILURE;
  51.         }
  52.         
  53.         rc = iconv(__iconv, in_buf, in_len, out_buf, out_len);

  54.         if ( 0 != *in_len ) {
  55.                 printf ( "transform failure\n" );
  56.                 return EXIT_FAILURE;
  57.         }

  58.         if ( iconv_close(__iconv) ) {
  59.                 return EXIT_FAILURE;
  60.         }

  61.         return rc;
  62. }                // -----  end of function recode  -----


復(fù)制代碼
這里,每次取一行,作轉(zhuǎn)換,但是每次運(yùn)行到特定行(如果使用不同的文件,行數(shù)是不一樣的)的時(shí)侯,就會(huì)拋出SIGSEGV信號(hào),rc和lines變量會(huì)被更改為一個(gè)特定的大數(shù),

我想和文本文件沒什么關(guān)系,如果只是輸出,就沒問(wèn)題。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP