簡體   English   中英

讀取文件並使用C刪除字符

[英]read a file and remove characters using C

我正在努力讀取文件並刪除該行中的某些字符,我可以以任何方式刪除字符,但是char *包含許多未知的內容。

這是在我的文件中。 只是一條線

localpath=/home/ubu/myDocs

在我的代碼中

#include <stdio.h>
#include <strings.h>

char *path;

int main()
{ 
  static const char filename[] = "pathFile";
  FILE *file = fopen ( filename, "r" );

   if ( file != NULL )
   {
      char line[512];
      while ( fgets ( line, sizeof line, file ) != NULL ) // read a line 
      {
         fputs ( line, stdout ); // write the line 
         path = strchr(line,'=') +1 ;
      }
      fclose ( file );
   }
   else
   {
      perror ( filename ); // why didn't the file open? 
   }
}

但問題是我不能使用路徑,例如chdir(path); 無法正常工作,但是如果我這樣使用strcpy(path,“ / home / ubu / myDocs”); 我可以用

所以我知道我像這樣打印字符

對於(i = 0,i <200; i ++)printf(path [i]);

在第一種情況下,在輸出(“ / home / ubu / myDocs”)之后,我得到了一些奇怪的字符,但是在第二種情況下,我沒有得到這種東西,並且效果很好。 我不知道該怎么辦,我在互聯網上遵循了很多方法,但同樣的事情也會發生,請向我解釋發生了什么並給我一些解決方案

ps我發現在第一種情況下chdir返回值<0,這意味着path錯誤,不,但是它包含path和一些無用的東西

謝謝

您能准確添加從printf()看到的輸出嗎?

我最好的猜測是fgets()僅包含額外的字符。 當您執行fgets()並傳遞sizeof line ,它將最多讀取512個字符,但將在換行符\\n或EOF(或其他字符,如回車符\\r )之后停止。 特別是,如果文件中有換行符,它將被復制到fgets() 嘗試刪除文件路徑末尾的所有多余字符。

編輯因此,您有兩個獨立的問題。 首先是為什么在打印path時會看到垃圾。 嗯...那是因為您可以打印200個字符。 您希望其他〜190個字符是什么? 我不知道為什么在使用strcpy()時為什么看不到垃圾,但實際上並沒有真正顯示出所做的事情。 第二個問題是@WhozCraig指出的問題。 if塊的末尾,您的line超出了范圍。 如果在此點之后在路徑上調用chdir() ,則path指向垃圾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM