首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问一个神奇的有关问题, 关于printf字符串

2012-02-24 
问一个神奇的问题, 关于printf字符串我从文件中按行读取字符串while(1){if(fgets(rawLine,MAX_LINE_SIZE,y

问一个神奇的问题, 关于printf字符串
我从文件中按行读取字符串
while(1)     {
              if   (fgets(rawLine,   MAX_LINE_SIZE,   yyin)   ==   NULL)     {
                  return   -1;
            }  
            else     {
                  //-   make   sure   the   line   is   terminated  
                  if   (rawLine[strlen(rawLine)-1]   !=   '\n ')     {
                        rawLine[strlen(rawLine)]   =   '\n ';
                        rawLine[strlen(rawLine)+1]   =   '\0 ';
                  }
  printf( ":::%d\t\t%s ",strlen(rawLine),   rawLine);
                  break;
            }
      }
本来程序很好用的,   但是今天下午解析一个两万多行的文件时,突然有了个段错误:


要读入的文件在3000多行的位置是这些数据:
//////////////////////////////////////////////////////////////////////////////
//                                                                     Code   Area                                                               //
//////////////////////////////////////////////////////////////////////////////
//   Global   Registers                                                                                                                   //
//   ----------------                                                                                                                   //
//     r10   flag_reg                                                                                                                         //
//     r9     fifo                                                                                                                                 //


//     r8     word_buffer                                                                                                                   //
//     r7     bit_ptr                                                                                                                           //
//////////////////////////////////////////////////////////////////////////////
//   flag_reg   (initial   value   0x00000040)                                                                             //
//   --------                                                                                                                                   //
//     bit     00         ->   flag_noemupre   ->   {0,1}{emupre,noemupre}                                       //
//     bit     01         ->   flag_slicetype   ->   {0,1}{I,P}                                                             //
//     bits   05:02   ->   flag_mb_avail   ->   {0,1}{nav,av}   ACBD                                               //
//     bits   07:06   ->   flag_false_true   ->   always   set   to   01                                               //
//     bits   09:08   ->   flag_intra_mode   ->   {00,10,11}{inter,intra4x4,intra16x16}     //
//     bits   11:10   ->   flag_disable_df   ->   {00,01,10}{df,nodf,restrictdf}                   //
//     bit     12         ->   flag_top_frbnd   ->   {0,1}{no_top_frbnd,top_frbnd}                       //
//     bit     13         ->   flag_left_frbnd   ->   {0,1}{no_left_frbnd,left_frbnd}                 //


//     bit     14         ->   flag_error   ->   {0,1}{noerror,error}                                                 //
//     bit     15         ->   flag_seek_idr   ->   {0,1}{normal,seekidr                                           //
//     bits   31:28   ->   flag_cbpc                                                                                                   //
//     bits   27:24   ->   flag_cbpl                                                                                                   //
//////////////////////////////////////////////////////////////////////////////


而我读取文件并显示得到的结果如下,对应上面的最后5行,看下面这段的最后一行:
参考:   printf( ":::%d\t\t%s ",strlen(rawLine),   rawLine);


:::80//     bit     14         ->   flag_error   ->   {0,1}{noerror,error}                                                 //
:::80//     bit     15         ->   flag_seek_idr   ->   {0,1}{normal,seekidr                                           //
:::80//     bits   31:28   ->   flag_cbpc                                                                                                   //
:::80//  


让我感到奇怪的是:   明明用strlen显示出该字符串有80个字符,   怎么只能打印出3个出来????
这样肯定会出现段错误的.

[解决办法]
rawLine怎么定义的?什么编译器?
你在用lex/yacc吧。
[解决办法]
换个编译器试试吧。
[解决办法]
确定fgets取出来是对的吗?是不是遇到一些奇怪字符?
[解决办法]
rawLine[strlen(rawLine)] = '\n '; //把字串最后的0清了
rawLine[strlen(rawLine)+1] = '\0 '; //这里strlen得到的长度不对了...

热点排行