我一直在使用this tutorial使C++ CGI腳本。然而,這不是在編譯的時候我嘗試讀取表單POST數據:C++ CGI腳本,讀取表格數據
char* lpszContentLength = getenv("CONTENT_LENGTH");
char* lpszBuffer;
int nContentLength = atoi(lpszContentLength);
lpszBuffer = malloc(lpszContentLength+1); // allocate a buffer
memset(lpszBuffer, 0, lpszContentLength+1); // zero it out
fread(lpszBuffer,1,lpszContentLength,stdin); // get data
以下是編譯器的投訴:
cgi.cpp: In function ‘int main()’:
cgi.cpp:12: error: invalid conversion from ‘char*’ to ‘size_t’
cgi.cpp:12: error: initializing argument 1 of ‘void* malloc(size_t)’
cgi.cpp:12: error: invalid conversion from ‘void*’ to ‘char*’
cgi.cpp:13: error: ‘memset’ was not declared in this scope
cgi.cpp:15: error: invalid conversion from ‘char*’ to ‘size_t’
cgi.cpp:15: error: initializing argument 3 of ‘size_t fread(void*, size_t, size_t, FILE*)’
哪裏LN 12是一個開始「lpszBuffer」。
我是新的C++,所以我不知道該如何解決這個問題,爲什麼這可能發生。也許這只是過時的代碼......我會高興地接受一些其他解決方案來從POST請求中讀取數據。
編輯: 我已經更新了代碼,根據你們傢伙的修復。
char* lpszContentLength = getenv("CONTENT_LENGTH");
char* lpszBuffer;
int nContentLength = atoi(lpszContentLength);
lpszBuffer = (char*)malloc(nContentLength+1); // allocate a buffer
memset(lpszBuffer, 0, nContentLength+1); // zero it out
fread(lpszBuffer,1,nContentLength,stdin); // get data
不過,我還是得到atoi將分段故障:
==23419== Invalid read of size 1
==23419== at 0x498DA8C: ____strtol_l_internal (strtol_l.c:298)
==23419== by 0x498D7EF: strtol (strtol.c:110)
==23419== by 0x498AB60: atoi (atoi.c:28)
==23419== by 0x8048899: main (in .../cgi.cpp.cgi)
==23419== Address 0x0 is not stack'd, malloc'd or (recently) free'd
這裏有什麼問題嗎?我假設它是與POST表單提交如果該信息是空白......
不應'malloc(lpszContentLength + 1)'是'malloc(nContentLength + 1)'?同樣在'memset()'和'fread()'中...... – 2012-04-26 06:06:35
這段代碼與C++沒有任何關係。該教程是可怕的。我建議先找到一本好的C++書,然後*參與CGI。 – 2012-04-26 16:22:46
@KonradRudolph同意...我會嘗試其他的東西。 – varatis 2012-04-26 16:29:22