我尝试通过硬编码来打印输出,但是我收到错误,因为我给出的参数是类型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();
}
答案 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);
代码仍然无效,因为destU
和destP
都会指向空字节,这意味着printf()
会将'\0'
作为第一个字符,并且不会打印任何东西。
您应该解释代码所谓要执行的操作,以便我们可以说出它出错的地方。