【发布时间】:2014-04-13 11:53:17
【问题描述】:
我尝试通过硬编码来打印输出,但我收到了一个错误,因为我给出的参数是 char** 类型,printf 中的格式是指定类型 char*。
还有四行我不明白的代码(请参阅下面代码中的代码 cmets),所以如果有人解释该代码块会非常有帮助。
#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();
}
【问题讨论】:
-
这段代码是从哪里来的?它的目的是什么? (不知道这一点,我们只能推测个别线路的目的......)
-
我想你会对你标记的那些 after 的两行更感兴趣,因为它们是调用 undefined behavior 在你的程序中。标记的行只是使用指针取消引用运算符将单个字符存储在来自调用者的提供缓冲区中。 (使用第二对增加存储位置)。
-
@OliCharlesworth - 我编写这段代码是为了通过 POST 方法从网站获取输入。所以基本上我将输入存储在 inputArray 中,然后调用方法 inputParsing 将用户名和密码分开并将它们存储在两个不同的数组中。
-
如果你写了这段代码,你为什么要问我们这些行的目的是什么?
-
@WhozCraig - 是的,我理解标记线的作用,但我不明白为什么我需要这样做。我从教授的笔记中复制了那部分,所以我不确定为什么需要它。