格式指定类型' char *',但参数的类型为' char **'

时间:2014-04-13 11:53:18

标签: c cgi

我尝试通过硬编码来打印输出,但是我收到错误,因为我给出的参数是类型char**,而printf中的格式是指定类型char *。

还有四行我不理解的代码(参见下面的代码中的代码注释),所以如果有人解释这段代码,那将会非常有用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inputParsing(char *src, char *end, char *destU, char *destP) {
    int x = 0;
    for(; src != end; src++){
        if((*src != '+') && x==0) {
            *destU = *src;
            destU++;
        }
        else if((*src != '+') && x==1){
            *destP = *src;
            destP++;
        }
        else {
            x = 1;
        }
    }
    *destU = ' ';                  //What does this line do?
    *destP = ' ';                  //What does this line do?
    *++destU = '0';                //What does this line do?
    *++destP = '0';                //What does this line do?
    printf("%s\n",&destU);
    printf("%s\n",&destP);
}

void inputStoring() {
    char inputArray[200];
    char usernameArray[200];
    char passwordArray[200];
    //int n = atoi(getenv("CONTENT_LENGTH"));
    //fgets(inputArray, n+1, stdin);
    strcpy(inputArray, "gaming+koko");
    int n = strlen(inputArray);
    inputParsing(inputArray, inputArray + n, usernameArray, passwordArray); //inputArray+n is referencing the array cell that contains the last inputted character.
}

int main(void) {
    inputStoring();
}

2 个答案:

答案 0 :(得分:0)

您的代码中的

destU和destP是char *。但是你正在将它们传递给printf并带有&amp;标志意味着你传递了他们的地址,所以printf得到一个字符指针的地址。

你需要将destU和destP传递给printf函数

printf("%s\n",destU);
printf("%s\n",destP);

以下是我在Google上通过简单搜索找到的指针的小指南 http://pw1.netcom.com/~tjensen/ptr/pointers.htm

*destU = ' ';         /*Sets "space character" or ' ' at the current destU pointer position*/        
*destP = ' ';         /*Same but for destP*/                  
*++destU = '0';       /*Moves pointer position by 1 place forward and sets a value 0 byte in its place - this is not a string terminating value (\0 is) so u may have problems when trying to print the string thank you EOF for correcting*/
*++destP = '0';      /*Same but for destP*/

inputArray + n也是一个\ 0字节值,所以你只能询问该值是否为\ 0(每个字符串都以\ 0结尾)

答案 1 :(得分:0)

更正char* vs char** - 问题和'0' vs '\0' - 问题

*++destU = '\0';                //What does this line do?
*++destP = '\0';                //What does this line do?
printf("%s\n",destU);
printf("%s\n",destP);

代码仍然无效,因为destUdestP都会指向空字节,这意味着printf()会将'\0'作为第一个字符,并且不会打印任何东西。 您应该解释代码所谓要执行的操作,以便我们可以说出它出错的地方。