在浏览互联网之后,我写了下面的脚本,但仍然有错误,有人知道错误是什么吗?(错误的行)
typedef struct name_value_set {
char name[250];
char value[250];
} nv_set;
char * getInput2(char *param) {
char *my_data=0;
int data_len;
char *tmp_ptr, *tmp;
int i;
nv_set *nv;
data_len=atoi(getenv("CONTENT_LENGTH"));
char field[data_len];
my_data=(char*)malloc(sizeof(char)*(data_len+1));
fread(my_data,1,data_len,stdin);
i=0;
while (my_data[0]!='\0') {
tmp=split(my_data,'='); // err
makespace(tmp);
tmp=convert(tmp); // err
strcpy(nv[i].name,tmp); //
tmp=split(my_data,'&'); //err
makespace(tmp); //
tmp=convert(tmp); // err
strcpy(nv[i].value,tmp); //
i++;
}
i--; //
int j=0;
for (j=0; j<i; j++) {
if(nv[j].name == param) {
return nv[j].value;
}
}
void makespace(char *s)
{
int i,len;
len=strlen(s);
for (i=0;i<len;i++) {
if (s[i]=='+')
s[i]=' ';
}
}
char *split(char *s, char stop)
{
char *data;
char *tmp;
int i,len,j;
len=strlen(s);
tmp=s;
data=(char*)malloc(sizeof(char)*(len+1));
for (i=0;i<len;i++) {
if (s[i]!=stop)
data[i]=s[i]; //
else {
i+=1; //
break;
}
}
data[i]='\0';
for (j=i;j<len;j++)
s[j-i]=tmp[j];
s[len-i]='\0';
return data;
}
char *convert(char *s)
{
int x,y,len;
char *data;
len=strlen(s);
data=(char*)malloc(sizeof(char)*(len+1));
y=0;
for (x=0;x<len;x++) {
if (s[x]!='%') {
data[y]=s[x]; //
y++;
}
else {
data[y]=(char)(16*hexa(s[x+1])+hexa(s[x+2]));
y++;
x=x+2;
}
}
data[y]='\0';
return data;
}
int hexa(char c)
{
switch(c) {
case '0':return 0;
case '1':return 1;
case '2':return 2;
case '3':return 3;
case '4':return 4;
case '5':return 5;
case '6':return 6;
case '7':return 7;
case '8':return 8;
case '9':return 9;
case 'A':return 10;
case 'B':return 11;
case 'C':return 12;
case 'D':return 13;
case 'E':return 14;
case 'F':return 15;
}
return 0;
}
答案 0 :(得分:1)
尝试在代码的开头添加“makespace”,“split”,“convert”和“hexa”函数的原型;我希望你所看到的是隐式声明的函数与函数定义冲突的结果。另外,为了确保您在源文件中包含stdio.h和string.h,对吧?