2012-04-18 52 views
1

您好,我正嘗試執行由Microsoft Visual Studio Ultimate 2010中的以下代碼生成的.exe文件,但是我沒有看到該文件被創建。通過fopen創建文件可以在Linux上正常工作,但不能在Windows上運行(MS VS 2010)

這段代碼在Linux下用GCC編譯和執行時工作得很好。

重複我能夠使用在Linux中創建的文件!但在Windows中,.exe程序無法爲用戶在命令提示符下輸入的名稱創建文件。

有人能讓我知道我的錯在編譯器方面嗎?

誠摯的謝意

// filename.cpp : Defines the entry point for the console application. 

    #include "stdafx.h"  //Please comment if code is to be executed in GCC 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <memory.h> 

    int main() 
    { 
     FILE *pFile; 
     char cNotes_buffer[100]; 
     memset(cNotes_buffer,0,100); 
     printf("Please enter name of the LOG file - with tag MAX 100 characters!! \n"); 
     if(fgets (cNotes_buffer , 100 , stdin) != NULL) 
      { 
      fclose (stdin); 
     } 

     printf("name of file %s \n", cNotes_buffer); 
     if ((pFile = fopen(cNotes_buffer,"a+")) == NULL) 
     { 
      printf("ERROR OPENING FILE FOR LOGGING \n"); 
      exit(0); 
     } 
     return 0; 
    } 
+0

嘗試使用'perror()'(而不是'printf()')來獲取錯誤消息。用'perror()'你也可以得到更多關於錯誤的信息。 – pmg 2012-04-18 11:25:48

+0

@pmg AFAIK窗口沒有'perror()'。它是'GetLastError()'。 – RedX 2012-04-18 11:31:25

+0

@RedX:除非正在使用的Windows編譯器不符合ANSI C89/ISO C90,否則Windows具有'perror()'。 – pmg 2012-04-18 11:40:20

回答

3

在輸入文件名後,很有可能你會按ENTER。所以\n也進入cNotes_buffer。現在您嘗試使用此緩衝區作爲文件名創建一個文件。我不認爲你可以在其中創建文件名\n

做這樣的事情,如果你按下回車鍵

cNotes_buffer[strlen(cNotes_buffer)-1]=0; 

編輯:換行符可以出現在Linux中filenames但不能因此就Windows這就解釋了爲什麼您的文件得到了在Linux,但不能創建在Windows上。

+0

可能他的文件是在linux的末尾用newline char創建的。這是不允許在Windows上 – msam 2012-04-18 11:32:20

+0

你是對的@msam! – 2012-04-18 11:39:12

0

嘗試fclose(pFile)。未能關閉文件會導致奇怪的行爲。

+0

hello @Pavan Manjunath,@ pmg,@ CodeChords男士感謝您的反饋......我錯過了一些真正重要的東西,Pavan突出顯示,所以我錯過了\ n已被添加到文件名中的那條語句......此外這在Linux中正常工作,但是當目錄內容的列表完成後,我得到的文件名附加?至少在Linux上。謝謝 – linuxstack 2012-04-18 11:47:16

相關問題