2011-04-28 50 views
2

使用Code :: Blocks IDE進行緩衝區解析功能的小型編碼項目,編譯時出現奇怪的錯誤(如上所示)。我在網上做了一些研究,通常是因爲Code :: Blocks在C++時試圖編譯C代碼,事實並非如此。這是C.C錯誤,「'expected'='','';' ,'asm'或'__attribute__'在'Bufferpar'之前「

確切消息讀取,再次如下

Line 3 : error: expected '=', ',', 'ASM', or '__attribute__' before 'BufferPar' 

其他的一切似乎編譯細除了這小小的一段代碼。我很無知,有什麼想法?恐怕我也許忽略了一些小細節....

#include <string.h> 

PCHAR BufferPar(PCHAR pPagebuffer, PCHAR pInitchar, PCHAR pFinalchar) 
{ 
    PCHAR vPointer, pNchar, *phLocate; 
    CHAR String[1024]; 

    if(pPagebuffer == NULL) return NULL; 

    if((vPointer=strstr(pPagebuffer, pInitchar) == NULL){ 
     return vPointer;} 
     else vPointer += strlen(pInitchar); 

    *phLocate = vPointer; 

    if((pNchar=strstr(vPointer, pFinalchar) == NULL)){ 
    return pNchar;} 
    else pNchar[0]='\0'; 

    strcpy(String, vPointer); 

    pNchar=[0]=pFinalchar=[0]; 

    return String; 

} 
+0

什麼是定義'PCHAR'標識符?另外,'C :: B'確實看起來像C++,而不是C,雖然在示例中沒有看到「C :: B」 - 那是什麼意思? – 2011-04-28 06:56:46

+0

你有適當的標題來處理PCHAR? – shuttle87 2011-04-28 06:58:23

+0

@Michael Burr:我相信C :: B是[Code :: Blocks](http://www.codeblocks.org/)的簡寫。 – 2011-04-28 07:04:32

回答

2

你需要一個#definetypedef或適當的頭聲明/定義PCHAR

如果你是處於虧損狀態,嘗試#include <string.h>後加入以下:

typedef char CHAR; 
typedef char* PCHAR; 

中有片段,編譯器會告訴你其他一些問題,所以我只是讓你以這種方式解決它們。但是,我會說你應該密切注意if條款中的分配操作。

我會去那麼遠,建議你改變你的代碼,遵循以下模式:

if((vPointer=strstr(pPagebuffer, pInitchar) == NULL){ ... } 

到:

vPointer=strstr(pPagebuffer, pInitchar); 

if(vPointer == NULL){ ... } 

我想你會有點悲傷的保存自己長遠來說,通過避免if語句的條件表達式中不必要的複雜性。

+0

已修復。謝謝。 <3 – Polishh 2011-04-28 07:04:43

+0

我很欣賞輸入。我仍然處於我的代碼的調試過程中,必須首先通過這個小小的障礙。無論如何,我遇到的問題是我正在使用Windows Wininet API,大多數自定義功能都包含了PCHAR,DWORD和wininet.h。這解決了這個問題,你是正確的,我有一個公平的編譯錯誤。感謝您的建議。再次,非常感謝它。 – Polishh 2011-04-28 07:13:43

1

超出此代碼的許多問題未編譯。

你應該在文件的頂部包含windows.h以擺脫PCHAR的問題和關於BufferPar的錯誤。

#include <windows.h> 

但是,這仍然不會解決編譯問題。

你的表達:

if((vPointer=strstr(pPagebuffer, pInitchar) == NULL){ 

不能編譯,因爲你缺少一組額外的括號中。試試這個:

if((vPointer=strstr(pPagebuffer, pInitchar)) == NULL){ 

同樣的事情在這裏:

if((pNchar=strstr(vPointer, pFinalchar) == NULL)){ 

應該是:

if((pNchar=strstr(vPointer, pFinalchar)) == NULL)){ 

(也pNchar後else子句被打破)

而此行絕對沒有意義:

pNchar=[0];=pFinalchar=[0]; 

這條線......

strcpy(String, vPointer); 

...是不安全的,因爲你要複製不定長度的字符串轉換成固定長度大小的緩衝區。改爲使用strncpy或strcpy_s。或者至少做一些智能來驗證源字符串不大於固定字符串的緩衝區大小。

而且最重要的是:

return String; 

不不不!不要返回一個指向堆棧變量的指針 - 你的程序最好會崩潰(或者更糟糕的是,根據函數被調用的方式和使用返回值,有一個非確定性錯誤)。在BufferPar返回後的後續函數調用會清除「String」保存的內存。

+0

對於額外的一組parens,編譯器只是警告過我,但我很感激。 &&至於字符串長度,我的代碼將在網上進行我的基本定義搜索。該字符串不能超過1024個字符。再一次,我欣賞這些意見。 – Polishh 2011-04-28 07:21:39

相關問題