我再次:P,無論如何,我一直在努力的C程序,以允許用戶登錄到一個網站,非常非常基本。CGI使用C分割錯誤
但是我的代碼給了我一個分段錯誤。
信息通過HTML POST到C,然後將其存儲在.ssv文件 用戶名密碼
當從網站上運行它,我得到腳本頭過早結束,並從bash的運行時,通過,我得到分段錯誤。
這裏是我的代碼:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(void){
char* s = malloc(100 * sizeof(char));
char* s2 = malloc(100 * sizeof(char));
int a=0;
printf("Content-type: text/html;charset=utf-8\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>Form Feedback</h1>\n");
int n = atoi(getenv("CONTENT_LENGTH"))+1;
char theString[n];
fgets(theString, n, stdin);
// theString = getenv("QUERY_STRING");
if(theString == NULL){
printf("<h2>Error</h2>\n");
return 0;
}
char parseValue[] = "&";
char* str = strtok(theString, parseValue);
// str = strtok(NULL, parseValue);
sscanf(str, "name=%s", s);
for (a=0; a<strlen(s); a++){
if(s[a]=='+'){
printf("<p>Please only use alfanumeric characters</p>");}
}
// str = strtok(NULL, parseValue);
sscanf(str, "password=%s", s2);
for (a=0; a<strlen(s2); a++){
if(s2[a]=='+'){
printf("<p>Please only use alfanumeric characters</p>");}
}
printf("<br><br><h1>REGISTRATION COMPLETE</h1>");
printf("</body>");
printf("</html>");
FILE *file;
file=fopen("members.ssv", "a+");
if(file==NULL){return 1;}
sprintf(str,"%s %s\n",s,s2);
fwrite(str,1,sizeof(str),file);
fclose(file);
return 0;
}
太感謝你了,如果你能幫忙,我已經被困了好幾天一直。
編輯:我修復了segmentaton錯誤,並提前結束腳本頭。但是,當我看着我的members.ssv文件,我得到的東西像
文件的開始: 空白 *空白* @R
我不知道爲什麼!
僅供參考,'(theString == NULL)'將永遠* *是真實的。你真的應該檢查你的圖書館電話的成功/失敗(在這個代碼中完成*一次*),或者[冒着神靈的憤怒](http://www.lysator.liu.se/c/ten- commandments.html)(參見命令#6)。 – WhozCraig