【发布时间】:2018-11-12 18:01:06
【问题描述】:
我希望我的程序清理静态字符数组以获取我尝试过使用 memset 的新输入,但它不起作用或者我做错了。请给点建议。提前致谢。
const char * password() {
static int i = 0;
static char pwd[STRING_LEN], c = '\0';
static char return_buffer[255];
memset(pwd, 0, sizeof pwd); //<---
memset(return_buffer, 0, sizeof return_buffer); //<--
printf("Password: ");
while (i < STRING_LEN){
pwd[i] = getch();
c = pwd[i];
if(c == 13) { break; }
i++;
}
pwd[i] = '\0';
snprintf(return_buffer, sizeof(return_buffer), "%s", pwd);
printf("\n");
return return_buffer;
}
【问题讨论】:
-
在什么情况下不工作?
-
如果用户输入
STRING_LEN字符,您将在数组外写入'\0'。您需要while (i < STRING_LEN - 1)为空值留出空间。 -
if(c == 13)看起来很可疑。 -
这取决于平台。
-
13 不是
'\n'而是'\r'(回车)。由于您使用getch(),我怀疑您在“换行符”由'\r'和'\n'组成的Windows 上,因此检查'\r'(= 13)是正确的(tm)事情。不过,'\r'和'\n'都不应该导致崩溃。