我正在使用 Linux,并且有一个自定义函数,它返回int
当前密钥类型的ASCII getch()
。在尝试习惯它以及如何存储密码时,我遇到了一个问题,我的代码如下:
int main() {
int c;
char pass[20] = "";
printf("Enter password: ");
while(c != (int)'\n') {
c = mygetch();
strcat(pass, (char)c);
printf("*");
}
printf("\nPass: %s\n", pass);
return 0;
}
不幸的是,我收到了来自 GCC 的警告:
pass.c:26: warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast
/usr/include/string.h:136: note: expected ‘const char * __restrict__’ but argument is of type ‘char’
我尝试使用指针而不是 char 数组进行传递,但第二次我键入了一个它的段错误的字母。该函数独立工作,但不在循环中,至少不像 Windows 系统上的 getch() 那样。
你能看出我的例子有什么问题吗?我很享受学习这个。
编辑:感谢答案,我想出了以下愚蠢的代码:
int c;
int i = 0;
char pass[PASS_SIZE] = "";
printf("Enter password: ");
while(c != LINEFEED && strlen(pass) != (PASS_SIZE - 1)) {
c = mygetch();
if(c == BACKSPACE) {
//ensure cannot backspace past prompt
if(i != 0) {
//simulate backspace by replacing with space
printf("\b \b");
//get rid of last character
pass[i-1] = 0; i--;
}
} else {
//passed a character
pass[i] = (char)c; i++;
printf("*");
}
}
pass[i] = '\0';
printf("\nPass: %s\n", pass);